質問はTwitterへ #RESTudy をつけてどうぞ。
- ステータスコードの分類
- 1xx, 2xx, 3xx, 4xx, 5xx
- 疎結合(↔密結合)
http://www.sophia-it.com/content/%E7%96%8E%E7%B5%90%E5%90%88
その他、以前に出てきた用語も、理解が不安なときはその都度前のページを振り返って見てみましょう。
- リクエスト/レスポンス(→ 6.5 p.73)
- レスポンスメッセージ、ステータスライン(→ 6.6 p.78)
- リソース(→ 3.3 p.27)
エラーのためのステータスコードが 4xx と 5xx の2種類あるのはなぜでしょうか?
200と201はどのように違うでしょうか? 301と303はどのように違うでしょうか?
9個のステータスコードが挙げられていますが、これ以外にどんなステータスコードが欲しいですか? それに相当するステータスコードがあるかどうか、付録Aで調べてみましょう。
- 4xx:クライアントエラー
クライアントエラーを示す。原因はクライアントのリクエストにある。エラーを解消しない限り正常な結果が得られないので、 同じリクエストをそのまま再送信することはできない- 5xx:サーバエラー
サーバエラーを示す。原因はサーバ側にある。サーバ側の原因が解決すれば、 同一のリクエストを再送信して正常な結果が得られる 可能性がある
クライアントが再び同じリクエストを送信していいかという点が大きく違います。これによってクライアントのプログラムも全く別のものになるでしょう。例えば、5xxの場合は自動的に再試行するという機能が実装できます。4xxではそのようにしてはいけません。
200は一般的な「成功」のステータスコードです。
201はさらに具体的に「リソースを作成した」ことを表します。「作成」なのでPOSTかPUTでしか使われません。201が使えるところで200を使っても間違いではありませんが、より詳細な情報を伝えたほうがクライアントにとって役立ちますね。
301はいわば「URLの引っ越し」です。URLが完全に変わったときに使用するので、メソッドは関係ありません。GETでもPOSTでも301になります。
303はリクエストに対する結果が、別のURLをGETすることにより取得できることを表します。よって次のメソッドは必ずGETになります。GET以外のリクエストのレスポンスで使われます。
ちなみに、当初301はメソッドを変えないという意味だったのですが、ブラウザの実装がメソッドをGETに変えるように誤って普及したため、変えても良いことになりました。変えてはいけない場合のために、新しく308が作られています。また、「一時的な移動」のための302から、同じ経緯で307が作られました。
* | 永久 | 一時的 |
---|---|---|
リクエストメソッドを GETに変えても良い |
301 | 302 |
リクエストメソッドを GETに変えてはいけない |
308 | 307 |
(303は一時的でGETへの変更を強制する。302に近い)
どこがRESTfulか、どうしたらRESTの規約に近づけるかなどをグループで話しあいましょう。
題材:はてなブログ http://hatenablog.com/ の中の個別のブログ
はてなアカウントを持っている人は、ブログを作成することで書き込みの機能についても調べることができます。
- どういうリソースがあるでしょうか? 画面を分類することによってリソースを見つけましょう。
例:ブログリソース、エントリリソース、… - リソースのURLはどんな名前でどういう規則になっているでしょうか?
- それぞれの画面にはどんなリンクやフォームがあるでしょうか? フォームのメソッドは?
- ここはRESTfulだ、ここはRESTfulじゃない、と思うところはどこでしょうか? どうすればよりRESTfulにできるでしょうか?
ブラウザのデベロッパーツールを使いましょう。
Windows: F12 か Ctrl+Shift+i
Mac: command+option+i
HTMLソースコードを見たり、リクエスト/レスポンスを見て、HTTPのルールに沿っているかどうか、RESTfulかどうかを調べましょう。
REST復習の参考スライド