4

我正在使用 Google Cloud Endpoints 创建一个 API,如果没有可返回的内容,我想在其中返回“无内容”HTTP 204 响应。我尝试返回 null,这会在开发服务器上引发错误,并在生产环境中返回非空结果,状态码为 200。

是否可以发送真正的 204 空响应或其他类型或自定义响应?

4

2 回答 2

5

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,感谢您找到此错误!

于 2013-03-06T16:34:37.933 回答
0

这可能无济于事,但我知道操纵状态码的唯一方法是引发异常。提供了一组默认异常,它们映射到 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"
 }
}
于 2013-03-05T12:46:26.043 回答