Google Cloud Endpointsを使用してAPIを作成しています。ここでは、返すものがない場合に「コンテンツなし」のHTTP204応答を返します。nullを返してみましたが、これは開発サーバーでエラーをスローし、本番環境ではステータスコード200の空でない結果を返します。
真の204の空の応答または他のタイプまたはカスタム応答を送信することは可能ですか?
Google Cloud Endpointsを使用してAPIを作成しています。ここでは、返すものがない場合に「コンテンツなし」のHTTP204応答を返します。nullを返してみましたが、これは開発サーバーでエラーをスローし、本番環境ではステータスコード200の空でない結果を返します。
真の204の空の応答または他のタイプまたはカスタム応答を送信することは可能ですか?
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を返します!
これはおそらく役に立ちませんが、ステータス コードを操作する方法として私が知っている唯一の方法は、例外を発生させることです。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"
}
}