在本地主机上测试应用引擎端点(IOS & Python)

testing app engine endpoints at localhost (IOS & Python)

我的端点通过 API-Explorer 工作,也可以在应用程序引擎运行时环境中工作(通过网络)

但是当我将 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 客户端到达的,但是在混合的某个地方它丢失了所以没有关于到达我的代码的 "request" 消息的属性的数据......all == None 我还在服务器控制台中看到此警告:

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

堆栈溢出意味着 "variant " 错误在 1.5 年前的开发服务器版本中很常见(在本地主机上)......我正在使用(最新)版本:

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

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

我发现了几个我怀疑不应该存在的地方..... 似乎应用引擎应该已经在其自己的路径中包含其中的许多内容:

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

If you're starting from scratch and you're using webapp2 or just using Cloud Endpoints: use the Skeleton project

因此,如果我们不使用 webapp2,我们可以做一个简单的 pip install ferris,但如果我们使用端点或 webapp2,我们必须通过 Node、Yeoman 和 Ferris 完成一些复杂的过程发电机.....

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

感谢您的任何提示!! 杜威

  1. 关于 Ferris 3 project, there's the option to use the ferris 3 generator to help you with a simple predefined app showing a simplified structure of how to get started with the project. Since it's a yeoman generator, you'll need nodejs、yeoman 等...

    但所有这些都是可选的。没有什么复杂的。他们只是作为一种开始进入更大的东西的选择,处理一些样板:)

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

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

    我一直按照建议销售 google-api-python-客户端 @ https://developers.google.com/api-client-library/python/start/installation#appengine 所以你现在得到的是正确的。

  3. 最后但同样重要的是,正如您正确指出的那样,您看到的错误似乎已经存在了很长一段时间。 Dave Fisher 为 his answer from a few years back 中的 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 行。我忘记了细节,但这是一个简单的编辑。我只是讨厌修改生成的代码。

真正的痛苦是做端口的所有其他小改动。 ;) 这是一个更好的系统和一个很好的端口。