48
RESTful #とは RailsスタイルからRESTを学ぼう 2014.10.30 Ruby Children #RESTudy

RESTful #とは RailsスタイルからRESTを学ぼう

Embed Size (px)

DESCRIPTION

RESTful#とは勉強会 http://rubychildren.doorkeeper.jp/events/15974

Citation preview

Page 1: RESTful #とは RailsスタイルからRESTを学ぼう

RESTful #とはRailsスタイルからRESTを学ぼう

2014.10.30 Ruby Children #RESTudy

Page 2: RESTful #とは RailsスタイルからRESTを学ぼう

@tkawa

• フリーランス Ruby/Rails プログラマ

• Technology Assistance Partner at SonicGarden Inc.

• REST厨 (RESTafarian)

• Sendagaya.rb 共同主催

• “RESTful Web APIs” 読書会主催

Page 3: RESTful #とは RailsスタイルからRESTを学ぼう

今日の内容• RESTって何?なぜ?どうすれば?

• Webのしくみ(ざっくり)とRails

• Railsスタイルで作る

• 質問タイム「Webアプリを作る」観点の話が中心ですが「Webアプリを使う」観点にも役立ちます。

Page 4: RESTful #とは RailsスタイルからRESTを学ぼう

REST

Page 5: RESTful #とは RailsスタイルからRESTを学ぼう

RESTって何?• Webの「建築様式」(Architectural Style)

• ざっくりいうと • Webのしくみを形作るための大枠になる取り決め(制約)

• Webが成功している理由の1つ

Page 6: RESTful #とは RailsスタイルからRESTを学ぼう

“REST”の枠に入るのがWebのパーツ

URL

HTTP

HTML

REST

{Web JSON

w/

Hyperm

edia

CoA

P

Page 7: RESTful #とは RailsスタイルからRESTを学ぼう

ちなみに

• REST:名詞RESTful:形容詞

• RESTful=「RESTな」「RESTの性質を持つ」

Page 8: RESTful #とは RailsスタイルからRESTを学ぼう

なぜREST?

• Web (URL, HTTP, HTML) の特長を十分に活かせる

• 人間とソフトウェア(自動処理)の両方に優しい

• シンプルな設計の指針

Webアプリを作るときは、 「RESTにしたほうがいい」とよく言われるけど…

Page 9: RESTful #とは RailsスタイルからRESTを学ぼう

どうすればREST?

• 抽象的な言葉なので、使う人によって意味が違って伝わらないことも…

• 具体的にはどうすればいいの?

Page 10: RESTful #とは RailsスタイルからRESTを学ぼう

RESTを学ぶには Webを学ぶことから

• Webのルールに従う

• URL, HTTP, HTML をよく知って、正しく使う

Page 11: RESTful #とは RailsスタイルからRESTを学ぼう

Webのしくみ

Page 12: RESTful #とは RailsスタイルからRESTを学ぼう

URL

HTTP

HTML

REST

{Web

HTTPとURLを中心にざっくりと説明します

Page 13: RESTful #とは RailsスタイルからRESTを学ぼう

ブラウザ

Page 14: RESTful #とは RailsスタイルからRESTを学ぼう

ブラウザ Webサーバ

1.

2.

1. ブラウザからWebサーバへリクエストを送る 2.レスポンス(HTML, CSS, JavaScript, JPEG,...)を返す

Page 15: RESTful #とは RailsスタイルからRESTを学ぼう
Page 16: RESTful #とは RailsスタイルからRESTを学ぼう
Page 17: RESTful #とは RailsスタイルからRESTを学ぼう

重要なのは • URL • リクエストメソッド

• ステータスコード

Page 18: RESTful #とは RailsスタイルからRESTを学ぼう

ブラウザ Webサーバ

1.

2.

1. ブラウザからWebサーバへリクエストを送る 2.レスポンス(HTML, CSS, JavaScript, JPEG,...)を返す

URL, リクエストメソッド

ステータスコード

Page 19: RESTful #とは RailsスタイルからRESTを学ぼう

ブラウザ Webサーバ

1.

2.

Page 20: RESTful #とは RailsスタイルからRESTを学ぼう

URL

• Web上に存在する「モノ(情報)」の名前(「モノ」のことをリソースと呼びます)

• ブラウザのアドレス欄に表示される • シンプルで意味のわかるものがよい

https://twitter.com/tkawa

http://rubychildren.doorkeeper.jp/events/15974

Page 21: RESTful #とは RailsスタイルからRESTを学ぼう

よちよち.rbのwikiに新しくページ作りたいんだけど、どうすればいいんだっけ?

Page 22: RESTful #とは RailsスタイルからRESTを学ぼう

よちよち.rbのwikiに新しくページ作りたいんだけど、どうすればいいんだっけ?

GitHubのトップの検索ボックスで「yochiyochirb」で検索してください。

そこから上のほうの「meetups」を押して、右上の「Wiki」を押して、さらに右上の「New Page」を押してください。

Page 23: RESTful #とは RailsスタイルからRESTを学ぼう

よちよち.rbのwikiに新しくページ作りたいんだけど、どうすればいいんだっけ?

https://github.com/yochiyochirb/meetups/wiki/_new

Page 24: RESTful #とは RailsスタイルからRESTを学ぼう

POST https://github.com/yochiyochirb/meetups/wiki

Page 25: RESTful #とは RailsスタイルからRESTを学ぼう

GET

取得

POST

作成

PUT

更新

DELETE

削除

リクエストメソッド

基本的にはこの4つだけ!!

例えば「ログインする」という操作はない※Create, Read, Update, Delete の頭文字からCRUDとも呼びます

Page 26: RESTful #とは RailsスタイルからRESTを学ぼう

リクエスト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 「モノ」

メソッド 「どうする」 名詞動詞

Page 27: RESTful #とは RailsスタイルからRESTを学ぼう

GET http://example.com/users/show/123

POST http://example.com/users/create

Page 28: RESTful #とは RailsスタイルからRESTを学ぼう

GET http://example.com/users/show/123

POST http://example.com/users/create

GET http://example.com/users/123

POST http://example.com/users

Page 29: RESTful #とは RailsスタイルからRESTを学ぼう

ステータスコード• リクエストに対するWebサーバからの結果を伝える

• 成功・失敗とその理由 • 3ケタの数字(+対応する説明)

Page 30: RESTful #とは RailsスタイルからRESTを学ぼう

• 200番台: 成功

• 200 OK

• 300番台: リダイレクト(URLが変わった)

• 301 Moved Permanently

• 400番台: クライアントが原因のエラー

• 404 Not Found

• 500番台: サーバが原因のエラー

• 500 Internal Server Error

Page 31: RESTful #とは RailsスタイルからRESTを学ぼう

RESTを学ぶには Webを学ぶことから

• Webのルールに従う

• URL, HTTP, HTML をよく知って、正しく使う

• しかし、それでもまだ自由すぎる • URL, HTTP, HTML をどう使えばいいの?

Page 32: RESTful #とは RailsスタイルからRESTを学ぼう
Page 33: RESTful #とは RailsスタイルからRESTを学ぼう

Railsスタイル

• RESTに沿っていて、さらにより具体的な設計のパターンを提示している

• 今のところ成功している(!) • Rails以外で作るときにも使えばいいよね

Page 34: RESTful #とは RailsスタイルからRESTを学ぼう

GET http://example.com/users/show/123

POST http://example.com/users/create

GET http://example.com/users/123

POST http://example.com/users

Page 35: RESTful #とは RailsスタイルからRESTを学ぼう

GET http://example.com/users/show/123

POST http://example.com/users/create

GET http://example.com/users/123

POST http://example.com/users

Page 36: RESTful #とは RailsスタイルからRESTを学ぼう

Railsスタイル

Page 37: RESTful #とは RailsスタイルからRESTを学ぼう

GET POST PUT DELETE

/user

Page 38: RESTful #とは RailsスタイルからRESTを学ぼう

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

Page 39: RESTful #とは RailsスタイルからRESTを学ぼう

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

/[まとまり]/[名前, 番号]まとまり 名前, 番号

Page 40: RESTful #とは RailsスタイルからRESTを学ぼう

GET POST PUT DELETE

/users

/users/123

Page 41: RESTful #とは RailsスタイルからRESTを学ぼう

GET POST PUT DELETE

/users index create - -

/users/123 show - update destroy

GET /users/new → new GET /users/123/edit → edit

Page 42: RESTful #とは RailsスタイルからRESTを学ぼう

リクエスト

レスポンス

• URL • リクエストメソッド

• ステータスコード

リクエストリクエストレスポンス

もう一度

Page 43: RESTful #とは RailsスタイルからRESTを学ぼう

Railsスタイルに沿ってリソースを作る

Page 44: RESTful #とは RailsスタイルからRESTを学ぼう

GET POST PUT DELETE

/users index create - -

/users/123 show - update destroy

/[まとまり]/ 番号まとまり

Page 45: RESTful #とは RailsスタイルからRESTを学ぼう

まとまりの名前 = “resources” の名前

• まとまりの種類の名前を考えよう(まとまりなので複数形)

• users, groups, …resources :users resources :groups

Page 46: RESTful #とは RailsスタイルからRESTを学ぼう

GET POST PUT DELETE

/groups index create - -

/groups/1 show - update destroy

「ユーザーがグループに加入する」は?

Page 47: RESTful #とは RailsスタイルからRESTを学ぼう

リクエストメソッドがあてはまらないときは、隠れたリソースがある

• 「ユーザーがグループに加入する」= 所属 membership の作成

GET POST PUT DELETE

/memberships index create - -

/memberships/1 show - update destroy

Page 48: RESTful #とは RailsスタイルからRESTを学ぼう

まとめ• “REST”の枠に入るのが

Webのパーツ

• Webで重要なのは • URL • リクエストメソッド • ステータスコード

• 作るときはRailsスタイルに従えば楽

http://rest-pattern.hatenablog.com/ http://d.hatena.ne.jp/tkawa/searchdiary?word=*[rest]