由于某种原因,当使用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。不知道我做错了什么或什么?
由于
答案 0 :(得分:1)
参数应显示为my_message_field.id
和my_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>