GAE Python SDK 1.8.3 を使用してローカルで実行されている Python Web サービスがあります。API に注釈を付け、Google Cloud Endpoints Service Generator を使用して iOS クライアント クラスを生成した後、それを使用してリモート プロシージャを呼び出そうとしています。
API Explorer を使用して API をテストすると、すべて正常に動作します。
iOS クライアントを使用して呼び出すと、呼び出しは Web サービスによって受信されますが、要求を正しくデコードできません。Endpoints API を使用するのはこれが初めてなので、何が問題なのかわかりません。
何が起こっているように見えるのは、リクエスト オブジェクトがクエリ JSON の「リソース」キーにラップされていることです。今、私の Web サービスがそれをデコードしようとすると、「認識されていないフィールドのバリアントが見つかりません: リソース」という警告が表示されます。そして、私のオブジェクトはこのキー内にラップされているため、スキップされ、メッセージにデコードされることはありません。
API Explorer を使用して呼び出しを行うと、オブジェクトはラップされないため、すべてが機能します。
これは私が私のWebサービスでやっていることです:
@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;
}
ここで信じられないほど間違ったことをしていますか?