测试localhost上的app引擎端点(IOS和Python)

时间:2016-03-27 21:44:39

标签: google-app-engine google-app-engine-python

我的端点通过API-Explorer工作,也可以在app-engine运行时环境中工作(通过网络)

但是当我将我的IOS客户端(通过模拟器)指向localhost:8080时,我的IOS测试失败,我看到空消息有效负载到达端点(在python端)

这令人非常沮丧,而且我一直试图弄清楚好几天......

我进入了protorpc源并添加了一个打印并得到了这个:

{
  "jsonrpc": "2.0",
  "method": "tstone.person.createGuy",
  "id": "gtl_1",
  "params": {
    "resource": {
      "isFemale": false,
      "alias": "Alias",
      "city": "Hanoi",
      "id": "1",
      "mobile": "+84932340799",
      "privs": "privs",
      "email": "hodanhcXXXgmail.com",
      "last": "Danh Chuan",
      "first": "Ho",
      "tags": "tags"
    }
  },
  "apiVersion": "v1"
}

所以很清楚我的数据是从IOS客户端传来的,但是在混合的某处它会丢失,因此没有关于“请求”消息的属性的数据到达我的代码...... {{ 1}} 我还在服务器控制台中看到此警告:

all == None

堆栈溢出意味着“变体”错误在1.5年前的开发服务器版本中很常见(在localhost上)......我在(最新)版本中:

  • app-engine-python 1.9.34
  • 核心2016.03.22

由于它适用于上述(API-Explorer / app-engine运行时)环境,我猜测它不是我的代码的问题,而是我的安装或本地配置的问题

所以我开始浏览vendored / lib目录中的模块,看看是否有旧版本或与dev_appserver模块中的内容冲突....

我找到了几个我怀疑不应该在那里..... 似乎应用引擎应该已经拥有其中的许多内容:

  • apiclient
  • googleapiclient
  • httplib2的
  • 的oauth2
  • oauth2client(由身份工具包使用,所以这个可能没问题)
  • protopigeon(ferris3的一个部分所以我猜这也没关系)
  • pyasn1
  • pyasn1_modules
  • RSA
  • simpleauth(我也将它用于身份工具包,所以没问题)
  • simplejson
  • 6
  • wsgiproxy

此外,在Ferris安装页面上,我发现了这一点:

  

如果你从头开始,你正在使用webapp2或只是使用   云端点:使用Skeleton项目

因此,如果我们不使用webapp2,我们可以做一个简单的protojson.py:267] No variant found for unrecognized field: resource ,但如果我们使用端点或webapp2,我们必须通过Node,Yeoman和Ferris生成器完成一些复杂的过程。 ....

为什么增加复杂性.....有人可以向我解释一下吗?

感谢任何提示!! 杜威

2 个答案:

答案 0 :(得分:0)

  1. 关于Ferris 3项目,可以选择使用the ferris 3 generator来帮助您使用简单的预定义应用程序,该应用程序显示了如何开始使用项目的简化结构。由于它是yeoman生成器,您需要nodejs,自耕农等...

    但所有这些都是可选。没什么复杂的。他们只是作为一个选项,可以跳入更大的东西,处理一些样板:)

  2. Ferris取决于google-api-python-client,而https://cloud.google.com/appengine/docs/python/tools/libraries27又需要所有这些依赖关系。

    确实,这些依赖关系似乎是app引擎的一部分。 google cloud sdk的lib&分别是第三方lib文件夹,所以我猜它们可以添加到app.yaml的库部分。但很难从那里追踪版本,而且根据以前的经验,我可以肯定地说,你不想依赖那些生产中的版本。他们没有固定,因此一直在改变。有关绝对支持的库的列表,您可以查看https://developers.google.com/api-client-library/python/start/installation#appengine

    我总是按照@ his answer from a few years back的建议出售google-api-python-client 所以你现在拥有的是正确的。

  3. 最后但并非最不重要的是,正如你正确地指出的那样,你所看到的错误似乎已经存在了很长一段时间。 Dave Fisher为{{3}}中的unrecognized field: 'resource'错误提供了一种解决方法,该错误已证明有用。

答案 1 :(得分:0)

BTW此问题已在最新版本的Google API Objective-C客户端库中修复。是时候将一切都移植到GTLR了。是啊! :)

https://github.com/google/google-api-objectivec-client-for-rest

GTLR的其他文档: https://github.com/google/google-api-objectivec-client-for-rest/wiki http://cocoadocs.org/docsets/GoogleAPIClientForREST

警告我们使用该库遇到了一个错误,我们必须更换一些库生成的#import行。我忘记了细节,但这是一个简单的编辑。我只是讨厌修改生成的代码。

真正的痛苦是做端口的所有其他微小变化。 ;)这是一个更好的系统,也是一个很好的端口。