Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

14,492 views

Published on

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

Published in: Technology
  • Be the first to comment

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

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

×