gpt4 book ai didi

python - AppEngine Endpoints 中 MessageField 的 GET 请求参数为 None

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:01 26 4
gpt4 key购买 nike

由于某种原因,我在使用 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。知道我是否做错了什么吗?

谢谢

最佳答案

参数应显示为 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>

关于python - AppEngine Endpoints 中 MessageField 的 GET 请求参数为 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com