繁体   English   中英

在本地主机上测试App Engine端点(IOS和Python)

[英]testing app engine endpoints at localhost (IOS & 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客户端到达的,但是在混合中的某个地方它丢失了,因此在到达我的代码的“请求”消息的属性上没有数据…… all == None还可以在服务器控制台中看到此警告:

protojson.py:267] No variant found for unrecognized field: resource

堆栈溢出表示“可​​变”错误在1.5年前的开发服务器版本中很常见(在localhost上)……而我正在使用(最新)版本:

  • app-engine-python 1.9.34
  • 核心2016.03.22

由于它可以在上述(API-Explorer / app-engine运行时)环境中运行,因此我推测这不是我的代码问题,而是我的安装或本地配置问题

因此,我开始浏览供应商提供的/ lib目录中的模块,以查看是否有旧版本或与dev_appserver模块中的内容冲突。...

我发现有几个我怀疑应该不存在的地方.....看来,应用程序引擎应该已经在自己的路径中包含了许多:

  • api客户端
  • googleapiclient
  • httplib2
  • oauth2
  • oauth2client(由身份工具包使用,因此这一点可能还可以)
  • protopigeon(ferris3的一个部门,所以我想也可以)
  • pyasn1
  • pyasn1_modules
  • rsa
  • simpleauth(我也将其用于身份工具包,所以还可以)
  • simplejson
  • wsgiproxy

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

如果您是从头开始,并且正在使用webapp2或仅使用Cloud Endpoints,请使用Skeleton项目

因此,如果我们不使用webapp2,则可以进行简单的pip install ferris ,但是如果我们使用端点或webapp2,则必须通过Node,Yeoman和Ferris生成器进行一些复杂的过程。

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

并感谢您的提示!! 杜威

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

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

  2. Ferris依赖于google-api-python-client ,而后者又需要所有这些依赖项。

    的确,这些依赖关系似乎分别作为应用程序引擎和Google Cloud SDK的lib和第三方lib文件夹的一部分出现,因此我想可以将它们添加到app.yaml “库”部分中。 但是从那里跟踪版本很困难,并且根据以前的经验,我可以肯定地说,您不想依赖生产版本。 它们没有固定,因此一直在变化。 有关绝对受支持的库的列表,可以查看https://cloud.google.com/appengine/docs/python/tools/libraries27

    我一直按照@ https://developers.google.com/api-client-library/python/start/installation#appengine的建议出售google-api-python-client,所以您现在所拥有的是正确的。

  3. 最后但并非最不重要的一点,正如您正确指出的那样,您看到的错误似乎已经存在了一段时间。 Dave Fisher为unrecognized field: 'resource'提供了一种解决方法unrecognized field: 'resource' 几年前他的回答中出现unrecognized field: 'resource'错误,事实证明是有帮助的。

顺便说一句,此问题已在最新版本的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行。 我忘记了细节,但这很容易编辑。 我只是讨厌修改生成的代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM