狠狠撸

狠狠撸Share a Scribd company logo
RESTful #とは 
搁补颈濒蝉スタイルからRESTを学ぼう 
2014.10.30 Ruby Children #RESTudy
@tkawa 
? フリーランス Ruby/Rails 
プログラマ 
? Technology Assistance Partner 
at SonicGarden Inc. 
? REST厨 (RESTafarian) 
? Sendagaya.rb 共同主催 
? “RESTful Web APIs” 
読書会主催
今日の内容 
? RESTって何?なぜ?どうすれば? 
? 奥别产のしくみ(ざっくり)とRails 
? 搁补颈濒蝉スタイルで作る 
? 質問タイム 
「Webアプリを作る」観点の話が中心ですが 
「Webアプリを使う」観点にも役立ちます。
REST
RESTって何? 
? Webの「建築様式」(Architectural Style) 
? ざっくりいうと 
? 奥别产のしくみを形作るための大枠に 
なる取り決め(制約) 
? Webが成功している理由の1つ
“REST”の枠に入るのが 
Webのパーツ 
HTML 
HTTP 
URL 
REST 
Web{ 
JSON w/ 
Hypermedia 
CoAP
ちなみに 
? REST:名詞 
RESTful:形容詞 
? RESTful=「RESTな」 
「RESTの性質を持つ」
なぜREST? 
Webアプリを作るときは、 
「RESTにしたほうがいい」とよく言われるけど… 
? Web (URL, HTTP, HTML) の特長を十分に 
活かせる 
? 人間とソフトウェア(自動処理)の 
両方に優しい 
? シンプルな設計の指針
どうすればREST? 
? 抽象的な言葉なので、使う人によって 
意味が違って伝わらないことも… 
? 具体的にはどうすればいいの?
RESTを学ぶには 
Webを学ぶことから 
? Webのルールに従う 
? URL, HTTP, HTML をよく知って、 
正しく使う
奥别产のしくみ
HTTPとURLを中心に 
ざっくりと説明します 
HTML 
HTTP 
URL 
REST 
Web{
ブラウザ
1. 
2. 
ブラウザWebサーバ 
1. ブラウザからWebサーバへリクエストを送る 
2.レスポンス(HTML, CSS, JavaScript, JPEG,...)を返す
RESTful #とは 搁补颈濒蝉スタイルからRESTを学ぼう
RESTful #とは 搁补颈濒蝉スタイルからRESTを学ぼう
重要なのは 
? URL 
? リクエストメソッド 
? ステータスコード
1. 
2. 
ブラウザWebサーバ 
URL, リクエストメソッド 
1. ブラウザからWebサーバへリクエストを送る 
2.レスポンス(HTML, CSS, JavaScript, JPEG,...)を返す 
ステータスコード
1. 
2. 
ブラウザWebサーバ
URL 
https://twitter.com/tkawa 
http://rubychildren.doorkeeper.jp/events/15974 
? Web上に存在する「モノ(情報)」の名前 
(「モノ」のことをリソースと呼びます) 
? ブラウザのアドレス欄に表示される 
? シンプルで意味のわかるものがよい
よちよち.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 
GET http://example.com/users/123 
POST http://example.com/users/create 
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 をどう使えばいいの?
RESTful #とは 搁补颈濒蝉スタイルからRESTを学ぼう
搁补颈濒蝉スタイル 
? RESTに沿っていて、さらにより具体的 
な設計のパターンを提示している 
? 今のところ成功している(!) 
? Rails以外で作るときにも使えばいいよ 
ね
GET http://example.com/users/show/123 
GET http://example.com/users/123 
POST http://example.com/users/create 
POST http://example.com/users
GET http://example.com/users/show/123 
GET http://example.com/users/123 
POST http://example.com/users/create 
POST http://example.com/users
搁补颈濒蝉スタイル
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 
? リクエストメソッド 
? ステータスコード 
リクエスト 
リクエスト 
レスポンス
搁补颈濒蝉スタイルに沿って 
リソースを作る
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 
? リクエストメソッド 
? ステータスコード 
? 作るときは搁补颈濒蝉スタイルに 
従えば楽 
http://rest-pattern.hatenablog.com/ 
http://d.hatena.ne.jp/tkawa/searchdiary?word=*[rest]

More Related Content

RESTful #とは 搁补颈濒蝉スタイルからRESTを学ぼう