4

Google Cloud Endpointsを使用してAPIを作成しています。ここでは、返すものがない場合に「コンテンツなし」のHTTP204応答を返します。nullを返してみましたが、これは開発サーバーでエラーをスローし、本番環境ではステータスコード200の空でない結果を返します。

真の204の空の応答または他のタイプまたはカスタム応答を送信することは可能ですか?

4

2 に答える 2

5

204 No Content実稼働PythonCloudEndpoints 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 Explorer を使用してテストすると、次の出力が表示されます。

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 に答える