スマホAPI の Controller 実装でよくつかう HTTPステータスコードの意図別まとめ
はじめに
Rails でスマートフォン向けの API をつくっている時にどの HTTPステータスコードを返すか、自分なりの判断基準をまとめてみました。
Controller を実装している時によく返すステータスコードをイメージしています。
200 :ok
- 以下が正常に行われた場合
- GET系。action: index, show
- UPDATE系。action: update
- DELETE系。action: destroy
201 :created
- 以下が正常に行われた場合
- POST系。action: create
400 :bad_request (2015/04/15 更新)
- 必要なパラメータが存在しない場合
- 例: 緯度と経度はセットでほしい
- パラメータが範囲を超えている場合
- 例: 検索条件のパラメータの範囲がオーバーしている
- クライアントを普通に使っていれば起こりえないリクエストを受け取ったとき
401 :unauthorized
403 :forbidden (2015/08/06 更新)
- ユーザが退会や BANされている状態で認証を試みた場合
404 :not_found
409 :conflict (2015/08/06 更新)
- リソースに矛盾がおきそうな場合
422 :unprocessable_entity
- バリデーションエラーの場合
- http://stackoverflow.com/questions/15225325/is-http-status-422-appropriate-for-records-that-fail-uniqueness-validation
- http://tools.ietf.org/html/rfc4918#section-11.2
- "the syntax of the request entity is correct (snip) but was unable to process the contained instructions"
さいごに
だいたいのケースは上記で間に合っている気がしてます。
他にもこういうステータスコード使うよ、このステータスコードはこういうシーンでも使ってるよ、それを表現するにはもっといいステータスコードがあるよ、などありましたら教えてください :)
参考
参考: Restful Webサービス
おまけ: ステータスコードの数字と意味/シンボルの見方
rails console> pp Rack::Utils::HTTP_STATUS_CODES => {100=>"Continue", 101=>"Switching Protocols", 102=>"Processing", 200=>"OK", 201=>"Created", 202=>"Accepted", ... 511=>"Network Authentication Required"}
rails console> pp Rack::Utils::SYMBOL_TO_STATUS_CODE => {:continue=>100, :switching_protocols=>101, :processing=>102, :ok=>200, :created=>201, :accepted=>202, ... :network_authentication_required=>511}
コードに数字が書いてあると意味の変換に脳内で時間がかかるので Symbol を使うのが好みです。