我正在使用 Google Cloud Endpoints 创建一个 API,如果没有可返回的内容,我想在其中返回“无内容”HTTP 204 响应。我尝试返回 null,这会在开发服务器上引发错误,并在生产环境中返回非空结果,状态码为 200。
是否可以发送真正的 204 空响应或其他类型或自定义响应?
我正在使用 Google Cloud Endpoints 创建一个 API,如果没有可返回的内容,我想在其中返回“无内容”HTTP 204 响应。我尝试返回 null,这会在开发服务器上引发错误,并在生产环境中返回非空结果,状态码为 200。
是否可以发送真正的 204 空响应或其他类型或自定义响应?
204 No Content
要为生产 Python Cloud Endpoints API返回一个,您可以使用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,感谢您找到此错误!
这可能无济于事,但我知道操纵状态码的唯一方法是引发异常。提供了一组默认异常,它们映射到 400、401、403、404 和 500。文档说您可以将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"
}
}