在本地主机上测试应用引擎端点(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 年前的开发服务器版本中很常见(在本地主机上)......我正在使用(最新)版本:
- 应用引擎-python 1.9.34
- 核心 2016.03.22
由于它在上述(API-Explorer/app-engine 运行时)环境中工作,我推测这不是我的代码的问题,而是我的安装或本地配置的问题
所以我开始查看我的 vendored /lib 目录中的模块,看看是否有旧版本或与 dev_appserver 模块中的某些内容冲突....
我发现了几个我怀疑不应该存在的地方.....
似乎应用引擎应该已经在其自己的路径中包含其中的许多内容:
- apiclient
- googleapiclient
- httplib2
- oauth2
- oauth2client(由身份工具包使用,所以这个可能没问题)
- protopigeon(ferris3 的 dep 所以我想这也可以)
- pyasn1
- pyasn1_modules
- rsa
- simpleauth(我也将它用于身份工具包,所以没问题)
- 简单json
- 六个
- wsgiproxy
此外,在 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 完成一些复杂的过程发电机.....
为什么增加了复杂性.....有人可以给我解释一下吗?
感谢您的任何提示!!
杜威
关于 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 等...
但所有这些都是可选的。没有什么复杂的。他们只是作为一种开始进入更大的东西的选择,处理一些样板:)
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
所以你现在得到的是正确的。
最后但同样重要的是,正如您正确指出的那样,您看到的错误似乎已经存在了很长一段时间。 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 行。我忘记了细节,但这是一个简单的编辑。我只是讨厌修改生成的代码。
真正的痛苦是做端口的所有其他小改动。 ;) 这是一个更好的系统和一个很好的端口。
我的端点通过 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 年前的开发服务器版本中很常见(在本地主机上)......我正在使用(最新)版本:
- 应用引擎-python 1.9.34
- 核心 2016.03.22
由于它在上述(API-Explorer/app-engine 运行时)环境中工作,我推测这不是我的代码的问题,而是我的安装或本地配置的问题
所以我开始查看我的 vendored /lib 目录中的模块,看看是否有旧版本或与 dev_appserver 模块中的某些内容冲突....
我发现了几个我怀疑不应该存在的地方..... 似乎应用引擎应该已经在其自己的路径中包含其中的许多内容:
- apiclient
- googleapiclient
- httplib2
- oauth2
- oauth2client(由身份工具包使用,所以这个可能没问题)
- protopigeon(ferris3 的 dep 所以我想这也可以)
- pyasn1
- pyasn1_modules
- rsa
- simpleauth(我也将它用于身份工具包,所以没问题)
- 简单json
- 六个
- wsgiproxy
此外,在 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 完成一些复杂的过程发电机.....
为什么增加了复杂性.....有人可以给我解释一下吗?
感谢您的任何提示!! 杜威
关于 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 等...
但所有这些都是可选的。没有什么复杂的。他们只是作为一种开始进入更大的东西的选择,处理一些样板:)
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 所以你现在得到的是正确的。
最后但同样重要的是,正如您正确指出的那样,您看到的错误似乎已经存在了很长一段时间。 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 行。我忘记了细节,但这是一个简单的编辑。我只是讨厌修改生成的代码。
真正的痛苦是做端口的所有其他小改动。 ;) 这是一个更好的系统和一个很好的端口。