1

由于某种原因,我在使用 http_method=GET 而不是 POST 时无法读取请求参数。

@endpoints.method(RequestMessage,
                  ResponseMessage,
                  name='get',
                  path='mypath',
                  http_method='GET')
def get_challenge(self, request):
    # This is None in http_method=GET but works on POST
    print request.my_message_field

我的消息类是这样的:

class MyMessage(messages.Message):
    id = messages.StringField(1)
    name = messages.StringField(2)

class RequestMessage(messages.Message):
    my_message_field = messages.MessageField(MyMessage, 1)

我正在通过 API Explorer 测试 API。知道我做错了什么吗?

谢谢

4

1 回答 1

1

参数应显示为my_message_field.idmy_message_field.name

根本区别在于它GET没有有效载荷并且POST有。因此,您的参数命名空间必须是“平面”而不是嵌套的 JSON。因此,为了适应这一点,我们将上面提到的参数展平。

更新:

这一定是一个问题,因为某些东西没有正确移植到devappserver. 我添加了一个记录器endpoints.apiserving来确定从 API 前端传递到 App Engine 后端的内容:

在生产中

'{"my_message_field":{"id":"x","name":"y"}}'

devappserver2

'{"my_message_field.name": ["y"], "my_message_field.id": ["x"]}'

尝试通过解析时

from protorpc import remote
protocols = remote.Protocols.get_default()
json_protocol = protocols.lookup_by_content_type('application/json')
json_protocol.decode_message(RequestMessage, payload)

这是做什么的api_server,这就是发生的事情

在生产中

<RequestMessage
 my_message_field: <MyMessage
 id: u'x'
 name: u'y'>>

devappserver2

<RequestMessage>
于 2013-04-28T19:48:38.487 回答