Skip to content

Instantly share code, notes, and snippets.

@tkawa
Last active Aug 29, 2015
Embed
What would you like to do?
RESTful#とは勉強会6 ポイント

RESTful#とは勉強会6 2015.04.28

質問はTwitterへ #RESTudy をつけてどうぞ。

「Webを支える技術」第8章 ステータスコード

重要な用語・概念

その他、以前に出てきた用語も、理解が不安なときはその都度前のページを振り返って見てみましょう。

  • リクエスト/レスポンス(→ 6.5 p.73)
  • レスポンスメッセージ、ステータスライン(→ 6.6 p.78)
  • リソース(→ 3.3 p.27)

グループで考えてみよう

ステータスコードの分類と意味 (8.3 p.112)

エラーのためのステータスコードが 4xx と 5xx の2種類あるのはなぜでしょうか?

よく使われるステータスコード (8.4 p.114)

200と201はどのように違うでしょうか? 301と303はどのように違うでしょうか?

9個のステータスコードが挙げられていますが、これ以外にどんなステータスコードが欲しいですか? それに相当するステータスコードがあるかどうか、付録Aで調べてみましょう。

解説

ステータスコードの分類と意味 (8.3 p.112)

  • 4xx:クライアントエラー
    クライアントエラーを示す。原因はクライアントのリクエストにある。エラーを解消しない限り正常な結果が得られないので、 同じリクエストをそのまま再送信することはできない
  • 5xx:サーバエラー
    サーバエラーを示す。原因はサーバ側にある。サーバ側の原因が解決すれば、 同一のリクエストを再送信して正常な結果が得られる 可能性がある

クライアントが再び同じリクエストを送信していいかという点が大きく違います。これによってクライアントのプログラムも全く別のものになるでしょう。例えば、5xxの場合は自動的に再試行するという機能が実装できます。4xxではそのようにしてはいけません。

よく使われるステータスコード (8.4 p.114)

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なサイト作り たまご編

どこがRESTfulか、どうしたらRESTの規約に近づけるかなどをグループで話しあいましょう。

題材:はてなブログ http://hatenablog.com/ の中の個別のブログ

はてなアカウントを持っている人は、ブログを作成することで書き込みの機能についても調べることができます。

グループで考えてみよう

  • どういうリソースがあるでしょうか? 画面を分類することによってリソースを見つけましょう。
    例:ブログリソース、エントリリソース、…
  • リソースのURLはどんな名前でどういう規則になっているでしょうか?
  • それぞれの画面にはどんなリンクやフォームがあるでしょうか? フォームのメソッドは?
  • ここはRESTfulだ、ここはRESTfulじゃない、と思うところはどこでしょうか? どうすればよりRESTfulにできるでしょうか?

調べ方のヒント

ブラウザのデベロッパーツールを使いましょう。
Windows: F12Ctrl+Shift+i
Mac: command+option+i

HTMLソースコードを見たり、リクエスト/レスポンスを見て、HTTPのルールに沿っているかどうか、RESTfulかどうかを調べましょう。

REST復習の参考スライド

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment