スマホ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 を使うのが好みです。
語源小話: edible から広がる語源の世界
本文
edible は形容詞で「食用の, 食べられる」という意味があります。語源を調べてみるとシンプルで、ラテン語の edere「食べる」+ able「〜できる」です。そのまんまの意味ですね。逆の意味で inedible「【形】食用でない, 食べられない」がありますが、この語源もシンプルです。in「〜でない」+ edible「食べられる」なので否定の意味になります。
あまり聞き慣れないかもしれませんが edacious という「【形】食いしん坊の」を意味する単語があります。これも同じ語源です。edere「食べる」+ ous「〜の性質がある」が合わさり「よく食べる」と派生し、前述の意味が生まれました。文語ですが comestible も edible とほぼ同じ意味です。先頭の com- は「強意」を意味します。
語源を学習していて注意すべきことの一つとして、同じつづりに見えても違う語源から派生する単語があります。たとえば editor です。edible と edi まで一緒なので、もしや食べることに関係している!? と想像できますが、語源を調べると異なります。editor はちょっと複雑に派生しています。ex-「外側へ」+ dit「与える」+ -or「する人」が合わさり「世 (外) に出版する (出す) ために書いたりまとめたりする人」という意味になり「【名】編集者」を意味するようになりました。語源 dit を含むわかりやすい例が donor です。dit「与える」+ -ate「〜する人」が語源なので意味は「【名】ドナー, 臓器提供者」となります。
dit の他の例として面白いのが date です。由来として 2つの説があるようです。1つ目が、ラテン語の手紙の最初に「与えられた」データが「日付」だったという説です。はるか昔のラテン語の手紙の最初には data という項目がありました。data には発信地や日付が書かれました。その data のつづりが変化して date となり、「日付」を意味するようになりました。2つ目が、古アイルランド語の dan (gift) であるという説です。もしかしたら 2つの説は歴史や宗教などで関連があるのかもしれませんが今回はそこまで調べることはできませんでした。2つ目の説の「日々の時間 (date) は与えられたギフトである」という考え方はなんだか素敵ですね。
あわせて知りたい
語源小話とは
一つの単語をピックアップし、語源を解説します。さらにそこから派生し、実は別の単語もつながっていることを説きます。語源の世界の魅力を伝えるための文章です。
語源小話タグをクリックすると過去の文章を見ることができます。
下記メディアで定期的に流しています。こちらもチェックしてみてください。
- Gogengo! User Group
- 投稿があると通知があるので見逃しにくいと思います
- Gogengo! Facebook Page
- Gogengo! Bot
そのうちまとめて Gogengo! 本体に取り入れようと考えています。
また、厳選した語源小話を iOSアプリ『おもしろ語源』で先行配信しています。そちらも使ってみてください。