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

Preview:

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]