REST APIで適切なHTTPステータスコードを返す

HTTPステータスコードは3桁の数字で表されており、最初の数字は分類を表しています。

  • 1XX(Informational)- 情報
  • 2XX(Successful)- 成功
  • 3XX(Redirection)- リダイレクト
  • 4XX(Client Error)- クライアントサイドに起因するエラー
  • 5XX(Server Error)- サーバサイドに起因するエラー

以下にREST APIで扱うことが多いHTTPステータスコードをピックアップしてまとめます。

2XX(Successful) - 成功

リクエストが成功したことを示します。

ステータスコード名前説明
200OKデータの取得に成功、またはリクエストした処理が成功した。
201Createdリクエストが成功し、サーバ側でデータが作成された。POSTメソッドで利用される。
202Acceptedリクエストが成功したが、まだ処理が完了していない。処理に時間がかかる場合に利用される。
204No Contentリクエストが成功し、レスポンスが空。DELETEメソッドやPUTメソッドで利用される。レスポンスを返す場合は204ではなく200を使う。

3XX(Redirection) - リダイレクト

Webサイトの場合は該当のページが移動した場合に別のページを表示させたい場合に利用されるリダイレクトですが、APIで使用することは好ましくはありません。
ブラウザであればHTTPステータスコードを見て適切にリダイレクトを行ってくれますが、APIの場合はクライアントが実装していなければ適切に処理されないためです。

以下には3XXのリダイレクト以外のステータスコードを記載します。

ステータスコード名前説明
304Not Modified前回のデータ取得からデータが変わっていない。レスポンスは空になる。

4XX(Client Error) - クライアントサイドに起因するエラー

クライアントのリクエストに問題があった場合に4XXのステータスコードが返されます。
サーバ側に問題は起きていないですが、クライアントからのリクエストのパラメータやリクエストが許可されていない場合に利用されます。

ステータスコード名前説明
400Bad Requestリクエストが正しくない。
401Unauthorized認証のエラー。
403Forbidden認可のエラー。
404Not Foundリクエストしたデータが存在しない。
405Method Not Allowedエンドポイントは存在するが、指定されたメソッドが許可されていない。
406Not Acceptableクライアントが指定したデータ形式(JSONやXML)に対応していない。
408Request Timeoutリクエストを送ることに時間がかかりすぎてサーバ側でタイムアウトした。
409Conflictリソースが競合したエラー。ID指定でデータを登録するリクエストの場合に、既に指定したIDのリソースが存在する時に利用さる。
410Gone以前は存在していたが、今はもう存在しない。
413Request Entity Too Largeリクエストボディ、リクエストヘッダーが大きすぎるエラー。
414Request-URI Too LargeGETのクエリパラメータが長すぎる場合のエラー。
415Unsupported Media TypeリクエストヘッダーのContent-Typeのデータ形式がサポートされていない。
429Too Many Requestsアクセス回数が上限に達した。

5XX(Server Error) - サーバサイドに起因するエラー

サーバ側に問題があった場合に5XXのステータスコードが返されます。

ステータスコード名前説明
500Internal Server Errorサーバ側になにか問題がある。
503Service Unavailableサーバが一時的に利用できない。メンテナンスでサービスを止める場合や、サーバが過負荷状態など一時的にレスポンスが返せない状態の時に利用される。

参考