我正在使用Google Cloud Endpoints创建API,如果没有任何内容可以返回,我希望返回“无内容”HTTP 204响应。我尝试返回null,它在开发服务器上抛出一个错误,并在生产时产生非空结果,状态代码为200.
可以发出真正的204空响应或其他类型或自定义响应吗?
答案 0 :(得分:5)
要为生产Python Cloud Endpoints API返回204 No Content
,您可以使用VoidMessage
。
from google.appengine.ext import endpoints
from protorpc import messages
from protorpc import message_types
from protorpc import remote
class MyMessage(messages.Message):
...
@endpoints.api('someapi', 'v1', 'Description')
class MyApi(remote.Service):
@endpoints.method(MyMessage, message_types.VoidMessage,
...)
def my_method(self, request):
...
return message_types.VoidMessage()
目前在开发服务器上返回200,感谢您找到此错误!
答案 1 :(得分:0)
这可能没有帮助,但我知道操纵状态代码的唯一方法是引发异常。提供了一组默认的例外情况,映射到400,401,403,404和500.文档说您可以subclass endpoints.ServiceException生成其他状态代码,但是我无法使其生效。如果将http_status设置为上面列出的其他内容之外的任何内容,则总是会产生400。
class TestException(endpoints.ServiceException):
http_status = httplib.NO_CONTENT
我在我的处理程序中运行这样的测试:
raise TestException('The status should be 204')
我在使用API资源管理器测试时看到了这个输出:
400 Bad Request
- Show headers -
{
"error": {
"errors": [
{
"domain": "global",
"reason": "badRequest",
"message": "The status should be 204"
}
],
"code": 400,
"message": "The status should be 204"
}
}