我有一个使用 GAE Python SDK 1.8.3 在本地运行的 python web 服务。在使用 Google Cloud Endpoints Service Generator 对 API 进行注释并生成 iOS 客户端类之后,我正在尝试使用它调用远程过程。
如果我使用 API Explorer 测试我的 api,一切正常。
当我使用 iOS 客户端调用时,Web 服务会接收到调用,但是无法正确解码请求。这是我第一次使用 Endpoints API,所以我不知道出了什么问题。
似乎正在发生的事情是我的请求对象被包装在查询 JSON 中的“资源”键中。现在,当我的网络服务尝试对其进行解码时,它会产生一条警告,提示“未找到无法识别的字段的变体:资源”。而且,由于我的对象被包裹在这个键中,它被跳过并且永远不会解码为消息。
当使用 API Explorer 进行调用时,对象没有被包装,所以一切正常。
这就是我在我的网络服务中所做的:
@endpoints.method(SearchRequest,
ContactListResponse,
path='search', http_method='post',
name='api.search')
def search(self, request):
user = request.user
number = request.number
这就是我从 iOS 中调用它的方式:
GTLMyAPIMessagesSearchRequest * request = [[GTLMyAPIMessagesSearchRequest alloc] init];
request.user = @"+552199881234";
request.number = @"+5521717171";
GTLQueryMyAPI *query = [GTLQueryMyAPI queryForApiSearchWithObject:request];
[service executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
GTLMyAPIMessagesContactListResponse* object,
NSError *error)
{
NSArray* contacts = object.contacts;
}
我在这里做错了什么吗?