You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.6 KiB

レスポンスステータスコード

レスポンスモデルを指定するのと同じ方法で、レスポンスに使用されるHTTPステータスコードを以下のpath operationsのいずれかのstatus_codeパラメータで宣言することもできます。

  • @app.get()
  • @app.post()
  • @app.put()
  • @app.delete()
  • など。
{!../../../docs_src/response_status_code/tutorial001.py!}

/// note | "備考"

status_codeは「デコレータ」メソッド(getpostなど)のパラメータであることに注意してください。すべてのパラメータやボディのように、path operation関数のものではありません。

///

status_codeパラメータはHTTPステータスコードを含む数値を受け取ります。

/// info | "情報"

status_codeは代わりに、Pythonのhttp.HTTPStatusのように、IntEnumを受け取ることもできます。

///

これは:

  • レスポンスでステータスコードを返します。
  • OpenAPIスキーマ(およびユーザーインターフェース)に以下のように文書化します:

/// note | "備考"

いくつかのレスポンスコード(次のセクションを参照)は、レスポンスにボディがないことを示しています。

FastAPIはこれを知っていて、レスポンスボディがないというOpenAPIドキュメントを生成します。

///

HTTPステータスコードについて

/// note | "備考"

すでにHTTPステータスコードが何であるかを知っている場合は、次のセクションにスキップしてください。

///

HTTPでは、レスポンスの一部として3桁の数字のステータスコードを送信します。

これらのステータスコードは、それらを認識するために関連付けられた名前を持っていますが、重要な部分は番号です。

つまり:

  • 100以上は「情報」のためのものです。。直接使うことはほとんどありません。これらのステータスコードを持つレスポンスはボディを持つことができません。
  • 200 以上は「成功」のレスポンスのためのものです。これらは最も利用するであろうものです。
    • 200はデフォルトのステータスコードで、すべてが「OK」であったことを意味します。
    • 別の例としては、201(Created)があります。これはデータベースに新しいレコードを作成した後によく使用されます。
    • 特殊なケースとして、204(No Content)があります。このレスポンスはクライアントに返すコンテンツがない場合に使用されます。そしてこのレスポンスはボディを持つことはできません。
  • 300 以上は「リダイレクト」のためのものです。これらのステータスコードを持つレスポンスは304(Not Modified)を除き、ボディを持つことも持たないこともできます。
  • 400 以上は「クライアントエラー」のレスポンスのためのものです。これらは、おそらく最も多用するであろう2番目のタイプです。
    • 例えば、404は「Not Found」レスポンスです。
    • クライアントからの一般的なエラーについては、400を使用することができます。
  • 500以上はサーバーエラーのためのものです。これらを直接使うことはほとんどありません。アプリケーションコードやサーバーのどこかで何か問題が発生した場合、これらのステータスコードのいずれかが自動的に返されます。

/// tip | "豆知識"

それぞれのステータスコードとどのコードが何のためのコードなのかについて詳細はMDN HTTP レスポンスステータスコードについてのドキュメントを参照してください。

///

名前を覚えるための近道

先ほどの例をもう一度見てみましょう:

{!../../../docs_src/response_status_code/tutorial001.py!}

201は「作成完了」のためのステータスコードです。

しかし、それぞれのコードの意味を暗記する必要はありません。

fastapi.statusの便利な変数を利用することができます。

{!../../../docs_src/response_status_code/tutorial002.py!}

それらは便利です。それらは同じ番号を保持しており、その方法ではエディタの自動補完を使用してそれらを見つけることができます。

/// note | "技術詳細"

また、from starlette import statusを使うこともできます。

FastAPI は、開発者の利便性を考慮して、fastapi.statusと同じstarlette.statusを提供しています。しかし、これはStarletteから直接提供されています。

///

デフォルトの変更

後に、高度なユーザーガイド{.internal-link target=_blank}で、ここで宣言しているデフォルトとは異なるステータスコードを返す方法を見ていきます。