5.6 KiB
レスポンスステータスコード
レスポンスモデルを指定するのと同じ方法で、レスポンスに使用されるHTTPステータスコードを以下のpath operationsのいずれかのstatus_codeパラメータで宣言することもできます。
@app.get()@app.post()@app.put()@app.delete()- etc.
{* ../../docs_src/response_status_code/tutorial001_py39.py hl[6] *}
/// note | 備考
status_codeは「デコレータ」メソッド(get、postなど)のパラメータであることに注意してください。すべてのパラメータやボディのように、path operation functionのものではありません。
///
status_codeパラメータはHTTPステータスコードを含む数値を受け取ります。
/// info | 情報
status_codeは代わりに、Pythonのhttp.HTTPStatusのように、IntEnumを受け取ることもできます。
///
これは:
- レスポンスでステータスコードを返します。
- OpenAPIスキーマ(およびユーザーインターフェース)に以下のように文書化します:
/// note | 備考
いくつかのレスポンスコード(次のセクションを参照)は、レスポンスにボディがないことを示しています。
FastAPIはこれを知っていて、レスポンスボディがないというOpenAPIドキュメントを生成します。
///
HTTPステータスコードについて
/// note | 備考
すでにHTTPステータスコードが何であるかを知っている場合は、次のセクションにスキップしてください。
///
HTTPでは、レスポンスの一部として3桁の数字のステータスコードを送信します。
これらのステータスコードは、それらを認識するために関連付けられた名前を持っていますが、重要な部分は番号です。
つまり:
100 - 199は「情報」のためのものです。直接使うことはほとんどありません。これらのステータスコードを持つレスポンスはボディを持つことができません。200 - 299は「成功」のレスポンスのためのものです。これらは最も利用するであろうものです。200はデフォルトのステータスコードで、すべてが「OK」であったことを意味します。- 別の例としては、
201(Created)があります。これはデータベースに新しいレコードを作成した後によく使用されます。 - 特殊なケースとして、
204(No Content)があります。このレスポンスはクライアントに返すコンテンツがない場合に使用されるため、レスポンスはボディを持ってはいけません。
300 - 399は「リダイレクト」のためのものです。これらのステータスコードを持つレスポンスは304(Not Modified)を除き、ボディを持つことも持たないこともできます。304はボディを持ってはいけません。400 - 499は「クライアントエラー」のレスポンスのためのものです。これらは、おそらく最も多用するであろう2番目のタイプです。- 例えば、
404は「Not Found」レスポンスです。 - クライアントからの一般的なエラーについては、
400を使用することができます。
- 例えば、
500 - 599はサーバーエラーのためのものです。これらを直接使うことはほとんどありません。アプリケーションコードやサーバーのどこかで何か問題が発生した場合、これらのステータスコードのいずれかが自動的に返されます。
/// tip | 豆知識
それぞれのステータスコードとどのコードが何のためのコードなのかについて詳細はMDN documentation about HTTP status codesを参照してください。
///
名前を覚えるための近道
先ほどの例をもう一度見てみましょう:
{* ../../docs_src/response_status_code/tutorial001_py39.py hl[6] *}
201は「作成完了」のためのステータスコードです。
しかし、それぞれのコードの意味を暗記する必要はありません。
fastapi.statusの便利な変数を利用することができます。
{* ../../docs_src/response_status_code/tutorial002_py39.py hl[1,6] *}
それらは単なる便利なものであり、同じ番号を保持しています。しかし、その方法ではエディタの自動補完を使用してそれらを見つけることができます。
/// note | 技術詳細
また、from starlette import statusを使うこともできます。
FastAPI は、開発者の利便性を考慮して、fastapi.statusと同じstarlette.statusを提供しています。しかし、これはStarletteから直接提供されています。
///
デフォルトの変更
後に、高度なユーザーガイド{.internal-link target=_blank}で、ここで宣言しているデフォルトとは異なるステータスコードを返す方法を見ていきます。