我试图更新我之前定义的端点,如下所示:
class NestedMessage(messages.Message):
foo = messages.StringField(1)
MyResource = endpoints.ResourceContainer(
message_types.VoidMessage,
param1=messages.StringField(1, required=True),
param2=messages.StringField(2),
param3=messages.MessageField(NestedMessage, 3)
)
class MyApi(remote.Service):
@endpoints.method(MyResource, messages.VoidMessage,
path='new', http_method='POST', name='new')
def new(self, request):
# ...
return messages.VoidMessage
我需要改为使用ResourceContainer
改为Message
类(不清楚哪一个用于POST
方法)。
所以我尝试更新到这个:
# NestedMessage unchanged
class NestedMessage(messages.Message):
foo = messages.StringField(1)
class MyMessage(messages.Message):
param1 = messages.StringField(1, required=True)
param2 = messages.StringField(2)
param3 = messages.MessageField(NestedMessage, 3)
class MyApi(remote.Service):
@endpoints.method(MyMessage, messages.VoidMessage,
path='new', http_method='POST', name='new')
def new(self, request):
# ...
return messages.VoidMessage
但是当我在/_ah/api/explorer
中尝试端点时,它只显示一个空白页面。在我的api上检查discovery.apis.getRest
的结果时,新的MyMessage
类没有列出,并且由于没有资源容器而导致MyApi.new
方法被禁止。
将方法重命名为其他内容(例如MyApi.create
)有效,但它会破坏MyApi.new
方法。
有没有办法强迫"强迫" Cloud Endpoints更新所有方法?
编辑这是在开发(localhost)和部署时。
编辑2 似乎这个问题只发生在API Explorer中。使用更新的端点(例如通过Javascript库)使用工作的更新方法。
编辑3 不等,我已经更新了两种端点方法。现在,它们都在API Explorer中表现良好,但其中一个似乎仍然被打破了#34;与Javascript客户端库一起使用时(即POST有效负载作为URL查询参数传递,而不是作为JSON主体传递)。另一个表现正常。发生了什么事?