【エラー処理】HTTPステータスコード
HTTPステータスコードとは
HTTPステータスコード(以下、ステータスコード)は、HTTPリクエストの処理が正常に完了したのか、または何かしらのエラーが発生して処理が失敗したのかを教えてくれる3桁の数字です。
この3桁の数字はHTTPレスポンスの一部として返ってきます。
レスポンスの種類は大きく分けて5つあり、レスポンスの各種類の中で更に細分化されています。
- 情報レスポンス(100系)
- 成功レスポンス(200系)
- リダイレクトメッセージ(300系)
- クライアントエラー(400系)
- サーバーエラー(500系)
WEBアプリの開発ではステータスコードを参考にして、どんな動作をさせるか、どんなメッセージを表示させるかなどを考えて実装します。
また、APIの開発をするときにはレスポンスごとにステータスコードを自分で決めて、APIの実装をすることができます。
実際にWEBアプリ開発で利用したステータスコード
全ての種類のステータスコードを利用してwebアプリを作らないと…なんてことはありません。
頻繁に利用するものもある一方で、なかなか見ないようなものや、利用を推奨されていないものもあります。
ここでは、WEBアプリ開発中に作成したエラー処理で、実際に利用しているステータスコードを紹介します。
成功レスポンス(200系)
200(OK)
リクエストの処理が正常に完了したことを示します。
GET
メソッドやPOST
メソッド、PUT
メソッドで利用されます。
僕がWEBアプリ開発している中ではDELETE
メソッドの成功レスポンスでも200を返すようにしています。
201(Created)
リクエストの処理が成功して、新しいリソースが作成されたことを示します。
POST
メソッドとPUT
メソッドの一部で利用されています。
動作や表示には何も影響しないけど、一部のデータ(APIキーなど)が作成されたり、変更されたりした場合に201を返すといった利用の仕方ができます。
クライアントエラー(400系)
400(Bad Request)
正しくないリクエストであるため、サーバーが処理を出来ないことを示します。
400はクライアントエラーの中でもカバーできるエラーの範囲が広いです。
バリデーションエラーを例に挙げると、ステータスコード422で対応していることもありますが、「正しくないリクエスト」として意味が通るので400で対応していることがあります。
開発を進めるときにクライアントエラーをなんでも400にしてしまうのではなく、他のステータスコードで表せるエラーかどうかを検討し、400でカバーするエラーの範囲をできるだけ絞ったほうがいいかもしれません。
401(Unauthorized)
クライアントが未認証であることを示します。
リクエストした処理を実行するためには認証を受けなければいけません。
ログイン後にできる処理で401のレスポンスを返してログイン(認証の処理)をさせる…といった利用の仕方ができます。
403(Forbidden)
クライアントにそのリクエストの処理をする権限がないことを示します。
401と意味が似ていますが、403は「認証」はされているけど、「認可」はされていないということになります。
ログインはしているけど、その処理を実行する権限がないので403を返す…といった利用の仕方ができます。
404(Not Found)
サーバーがリクエストされたリソースを発見できないことを示します。
存在しないページにアクセスしようとしたときや、存在しないデータにアクセスしようとしたときなどに404を返します。
404のレスポンスが返ってきたら、別のページ(404専用のページや1つ上の階層のページ)に遷移させるという利用の仕方ができます。
409(Conflict)
リクエストで送ったリソースとサーバー側のリソースの現在の状態と競合が生じていることを示します。
PUT
でリソースの更新をかける場合に生じる可能性があるステータスコードです。
古いバージョンのファイルをアップロードしたら409を返す…といった利用の仕方ができます。
423(Locked)
クライアントやアクセスしたリソースがロックされていることを示します。
ログインの失敗回数が上限に達した場合に、クライアントをロックして423を返すといった利用の仕方ができます。
429(Too Many Requests)
定められた時間内に大量のリクエストが送信されたことを示します。
サーバー側で時間当たりのリクエスト数を設定して、その設定を超えたリクエスト数の時に429を返すといった利用の仕方ができます。
サーバーエラー(500系)
500(Internal Server Error)
サーバー側に異常が発生していて、処理ができないことを示します。
ソースコードに誤った表記がされてたり不備があったりした場合、APIを利用していてSQLのエラーが生じた場合などに500のエラーレスポンスを返します。
502(Bad Gateway)
サーバー側に異常が発生していて、一時的にコンテンツが表示できないことを示します。
サーバーが大量アクセスの負荷に耐えきれない場合、サーバーのスペックが足りない場合に502のエラーレスポンスを返します。
503
サーバー側に異常が発生していて、サービスやコンテンツが利用できないことを示します。
サーバーが、メンテナンスやアクセスの負荷に耐えきれずダウンをしている場合に、503のエラーレスポンスを返します。
504
ゲートウェイまたはプロキシがタイムアウトしたことを示します。
プロキシサーバーが時間がたってもレスポンスを取得できない場合に504エラーレスポンスを返します。
まとめ
WEBアプリ開発を通して、フロントエンドでAPIを叩いてレスポンスに応じて動作を返る…ということをやっていると、ステータスコードがとても役に立ちます。
開発をするときに、ステータスコードで分からないことがあればこの記事を参考にしてみてください。
最後まで読んでいただき、ありがとうございました。
Discussion