【问题标题】:testing app engine endpoints at localhost (IOS & Python)在 localhost (IOS & Python) 测试应用引擎端点
【发布时间】:2016-03-27 21:44:39
【问题描述】:

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

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

这很令人沮丧,我已经尝试了好几天......

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

{
  "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 客户端到达的,但是在混合的某个地方它会丢失,因此没有关于“请求”消息属性的数据到达我的代码......@987654324 @ 我还在服务器控制台中看到了这个警告:

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 运行时)环境中工作,我推测这不是我的代码的问题,而是我的安装或本地配置的问题

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

我发现有几个我怀疑不应该在那里..... 似乎应用引擎应该已经在它自己的路径中包含了许多:

  • apiclient
  • googleapi客户端
  • httplib2
  • oauth2
  • oauth2client(由身份工具包使用,所以这个可能没问题)
  • protopigeon(ferris3 的一个部门,所以我想这也可以)
  • pyasn1
  • pyasn1_modules
  • rsa
  • simpleauth(我也将它用于身份工具包,所以没问题)
  • 简单的json
  • 六个
  • wsgiproxy

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

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

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

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

感谢任何提示! 杜威

【问题讨论】:

  • 我认为您在问 2 个不相关的问题。无论如何,关于 ferris 项目,可以选择使用 ferris 生成器来帮助您使用一个简单的预定义应用程序来展示如何使用 ferris。由于它是一个 yeoman 生成器,因此您需要 node、yeoman 等……但这是可选的。没什么复杂的。只是为了处理一些样板文件:)
  • Ferris 依赖于 google-api-python-client,而后者又需要所有这些依赖项。确实,它们似乎是应用引擎第三方 lib 文件夹的一部分,所以我想它们可以添加到 app.yaml 的库部分,但很难从那里追踪版本,从以前的经验来看,我可以肯定地说,您不能依赖生产中的那些。它们不是固定不变的,并且一直在变化。我一直按照 @developers.google.com/api-client-library/python/start/… 的建议出售 google-api-python-client
  • 你是对的......这是两个问题......我只是不知道这些问题是否相关,但似乎不......无论如何谢谢你回应..
  • 很高兴我能帮上忙。将 cmets 清理为响应。

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


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

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

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

    的确,这些依赖项似乎分别作为应用程序引擎和谷歌云 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 为his answer from a few years back 中的unrecognized field: 'resource' 错误提供了一种解决方法,这已被证明很有帮助。

【讨论】:

  • 感谢您的支持......修复(修改生成的 api 源代码)对我有用。目前尚不清楚该 mod 是否需要在到达真正的应用程序引擎运行时之前被反转,或者它是否是良性变化。你有什么意见,为什么谷歌似乎对解决这个问题反应迟钝?您会认为 Parse 关闭后,它们将遍布 IOS 社区......
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多