Upload
toru-kawamura
View
5.186
Download
0
Embed Size (px)
DESCRIPTION
RESTful#とは勉強会 http://rubychildren.doorkeeper.jp/events/15974
Citation preview
RESTful #とはRailsスタイルからRESTを学ぼう
2014.10.30 Ruby Children #RESTudy
@tkawa
• フリーランス Ruby/Rails プログラマ
• Technology Assistance Partner at SonicGarden Inc.
• REST厨 (RESTafarian)
• Sendagaya.rb 共同主催
• “RESTful Web APIs” 読書会主催
今日の内容• RESTって何?なぜ?どうすれば?
• Webのしくみ(ざっくり)とRails
• Railsスタイルで作る
• 質問タイム「Webアプリを作る」観点の話が中心ですが「Webアプリを使う」観点にも役立ちます。
REST
RESTって何?• Webの「建築様式」(Architectural Style)
• ざっくりいうと • Webのしくみを形作るための大枠になる取り決め(制約)
• Webが成功している理由の1つ
“REST”の枠に入るのがWebのパーツ
URL
HTTP
HTML
REST
{Web JSON
w/
Hyperm
edia
CoA
P
ちなみに
• REST:名詞RESTful:形容詞
• RESTful=「RESTな」「RESTの性質を持つ」
なぜREST?
• Web (URL, HTTP, HTML) の特長を十分に活かせる
• 人間とソフトウェア(自動処理)の両方に優しい
• シンプルな設計の指針
Webアプリを作るときは、 「RESTにしたほうがいい」とよく言われるけど…
どうすればREST?
• 抽象的な言葉なので、使う人によって意味が違って伝わらないことも…
• 具体的にはどうすればいいの?
RESTを学ぶには Webを学ぶことから
• Webのルールに従う
• URL, HTTP, HTML をよく知って、正しく使う
Webのしくみ
URL
HTTP
HTML
REST
{Web
HTTPとURLを中心にざっくりと説明します
ブラウザ
ブラウザ Webサーバ
1.
2.
1. ブラウザからWebサーバへリクエストを送る 2.レスポンス(HTML, CSS, JavaScript, JPEG,...)を返す
重要なのは • URL • リクエストメソッド
• ステータスコード
ブラウザ Webサーバ
1.
2.
1. ブラウザからWebサーバへリクエストを送る 2.レスポンス(HTML, CSS, JavaScript, JPEG,...)を返す
URL, リクエストメソッド
ステータスコード
ブラウザ Webサーバ
1.
2.
URL
• Web上に存在する「モノ(情報)」の名前(「モノ」のことをリソースと呼びます)
• ブラウザのアドレス欄に表示される • シンプルで意味のわかるものがよい
https://twitter.com/tkawa
http://rubychildren.doorkeeper.jp/events/15974
よちよち.rbのwikiに新しくページ作りたいんだけど、どうすればいいんだっけ?
よちよち.rbのwikiに新しくページ作りたいんだけど、どうすればいいんだっけ?
GitHubのトップの検索ボックスで「yochiyochirb」で検索してください。
そこから上のほうの「meetups」を押して、右上の「Wiki」を押して、さらに右上の「New Page」を押してください。
よちよち.rbのwikiに新しくページ作りたいんだけど、どうすればいいんだっけ?
https://github.com/yochiyochirb/meetups/wiki/_new
POST https://github.com/yochiyochirb/meetups/wiki
GET
取得
POST
作成
PUT
更新
DELETE
削除
リクエストメソッド
基本的にはこの4つだけ!!
例えば「ログインする」という操作はない※Create, Read, Update, Delete の頭文字からCRUDとも呼びます
リクエストGET https://github.com/yochiyochirb/meetups/wiki
POST https://github.com/yochiyochirb/meetups/wiki
PUT https://github.com/yochiyochirb/meetups/wiki
DELETE https://github.com/yochiyochirb/meetups/wiki
URL 「モノ」
メソッド 「どうする」 名詞動詞
GET http://example.com/users/show/123
POST http://example.com/users/create
GET http://example.com/users/show/123
POST http://example.com/users/create
GET http://example.com/users/123
POST http://example.com/users
ステータスコード• リクエストに対するWebサーバからの結果を伝える
• 成功・失敗とその理由 • 3ケタの数字(+対応する説明)
• 200番台: 成功
• 200 OK
• 300番台: リダイレクト(URLが変わった)
• 301 Moved Permanently
• 400番台: クライアントが原因のエラー
• 404 Not Found
• 500番台: サーバが原因のエラー
• 500 Internal Server Error
RESTを学ぶには Webを学ぶことから
• Webのルールに従う
• URL, HTTP, HTML をよく知って、正しく使う
• しかし、それでもまだ自由すぎる • URL, HTTP, HTML をどう使えばいいの?
Railsスタイル
• RESTに沿っていて、さらにより具体的な設計のパターンを提示している
• 今のところ成功している(!) • Rails以外で作るときにも使えばいいよね
GET http://example.com/users/show/123
POST http://example.com/users/create
GET http://example.com/users/123
POST http://example.com/users
GET http://example.com/users/show/123
POST http://example.com/users/create
GET http://example.com/users/123
POST http://example.com/users
Railsスタイル
GET POST PUT DELETE
/user
http://d.hatena.ne.jp/tkawa/20140923
http://d.hatena.ne.jp/tkawa/20140923/p1
http://baseball.example.jp/leagues
http://baseball.example.jp/leagues/central
http://railsapp.example.com/users
http://railsapp.example.com/users/123
http://d.hatena.ne.jp/tkawa/20140923
http://d.hatena.ne.jp/tkawa/20140923/p1
http://baseball.example.jp/leagues
http://baseball.example.jp/leagues/central
http://railsapp.example.com/users
http://railsapp.example.com/users/123
/[まとまり]/[名前, 番号]まとまり 名前, 番号
GET POST PUT DELETE
/users
/users/123
GET POST PUT DELETE
/users index create - -
/users/123 show - update destroy
GET /users/new → new GET /users/123/edit → edit
リクエスト
レスポンス
• URL • リクエストメソッド
• ステータスコード
リクエストリクエストレスポンス
もう一度
Railsスタイルに沿ってリソースを作る
GET POST PUT DELETE
/users index create - -
/users/123 show - update destroy
/[まとまり]/ 番号まとまり
まとまりの名前 = “resources” の名前
• まとまりの種類の名前を考えよう(まとまりなので複数形)
• users, groups, …resources :users resources :groups
GET POST PUT DELETE
/groups index create - -
/groups/1 show - update destroy
「ユーザーがグループに加入する」は?
リクエストメソッドがあてはまらないときは、隠れたリソースがある
• 「ユーザーがグループに加入する」= 所属 membership の作成
GET POST PUT DELETE
/memberships index create - -
/memberships/1 show - update destroy
まとめ• “REST”の枠に入るのが
Webのパーツ
• Webで重要なのは • URL • リクエストメソッド • ステータスコード
• 作るときはRailsスタイルに従えば楽
http://rest-pattern.hatenablog.com/ http://d.hatena.ne.jp/tkawa/searchdiary?word=*[rest]