使用Google Cloud Endpoints发送HTTP 204响应

时间:2013-03-03 20:28:54

标签: google-app-engine google-cloud-endpoints

我正在使用Google Cloud Endpoints创建API,如果没有任何内容可以返回,我希望返回“无内容”HTTP 204响应。我尝试返回null,它在开发服务器上抛出一个错误,并在生产时产生非空结果,状态代码为200.

可以发出真正的204空响应或其他类型或自定义响应吗?

2 个答案:

答案 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"
 }
}