SlideShare a Scribd company logo
RESTful APIとしての
Railsとクライアントとし
てのJavaScript
sednagaya.rb / ppworks
自己紹介

✤ @ppworks
✤ Ruby On Rails, Backbone.js, Objective-C
✤ sendagaya.rb
よくあるAjaxを利用した
ページの例
✤ Sedndagaya.rbというグループへ投稿出来るサイトがあ
  るとします。

✤ この時、グループのページにアクセスすると、グループ
  の詳細情報と、グループへ投稿された記事が表示されま
  す。
どんなことが
行われているのか
✤ 通常のリクエストに対するレスポンスの描写
✤ 非同期のリクエストに対するレスポンスの描写
✤ DOM要素のイベントに対するレスポンスの描写
通常のリクエストに
対するレスポンスの描写
通常のリクエストに
対するレスポンスの描写
✤ エンドユーザーがあるURIをブラウザ経由でアクセスす
 る。 たとえば、 http://example.com/groups/1 にHTTP
 GETリクエストを送信してアクセスする。

✤ Webサーバー(アプリケーション・サーバー)が対応する
 HTMLを返す。この例の場合、 /groups/1 に対応するリ
 ソースを返す。

✤ ブラウザがHTMLをレンダリングする。
通常のリクエストに
対するレスポンスの描写
非同期のリクエストに
対するレスポンスの描写
非同期のリクエストに
対するレスポンスの描写
✤ パスが /groups/1 の場合、特定の JavaScript が実行され
  るようにしておく。

✤ その JavaScript が /groups/1 に関連するリソースを非同
  期のHTTP GETリクエストを送信し、その結果をHTML
  内の特定のDOM要素へ差し込む。
非同期のリクエストに
対するレスポンスの描写
非同期のリクエストに
対するレスポンスの描写
DOM要素のイベントに
対するレスポンスの描写
DOM要素のイベントに
対するレスポンスの描写
✤ UIにイベントを付与する。
DOM要素のイベントに
対するレスポンスの描写
✤ ボタンをクリックすると投稿フォームを表示する。
どんなHTTPリクエスト
を送信したか
✤ GET /groups/1
✤ GET /groups/1/posts
✤ GET /groups/1/posts/new
POSTリクエストも
考えてみる
✤ /group/1/posts へ 非同期のHTTTP POSTリクエスト
POSTリクエストも
考えてみる
✤ リクエスト後、複数の処理を javascript で実行
必要なHTTPメソッドと
対応するURIを洗い出す
✤ GET http://example.com/groups/1
✤ GET http://example.com/groups/1/posts
✤ POST http://example.com/groups/1/post
✤ GET http://example.com/groups/new
✤ RESTfulの指向で考えると統一されたインターフェース
  から導けば良い

✤ RESTfulに作るとbackbone.jsなどと連携しやすい
JavaScriptの重要性
JavaScriptの
重要性
✤ 通常のHTTP GETリクエストの処理と合わせた非同期処
  理を行う際に JavaScript は必須

✤ このJavaScript をどこにどのように書く?
JavaScriptの
実行Routing
✤ 先の例のように通常のHTTPリクエストの後に、
 ✤ 非同期のHTTPリクエストを行いたい
 ✤ 特定のDOM要素のイベントをハンドリングしたい
✤ といった要件は、通常URIごとに異なります。
ひとつの.jsファイルに
全部書く例
$(function() {
    // user pageで使います
      $('.user a.follow').click(function(e) {
          e.preventDefault();
          // ajaxでフォロー処理をします
      });

      // グループページで使います。
      $('.group a.new_post').click(function(e) {
          e.preventDefault();
          // グループに投稿する記事フォームを表示
      }):

      // … とにかく続く
      // ウゲェ
});
ひとつの.jsファイルに
全部書く例
✤ たまたま```JavaScript``` の制御に利用するclass名やid名
  を追加したり削除したりすると悲惨

✤ そのページに関係ある処理とそうでない処理が分かりづ
  らい
jQuery-Router
を使った例
$.route(
    {
           path: //users/,
           func: function() {
               $('.user a.follow').click(function(e) {
                   e.preventDefault();
                   // ajaxでフォロー処理をします
               });
           }
    },
    {
           path: //groups/,
           func: function() {
               $('.group a.new_post').click(function(e) {
                   e.preventDefault();
               });
*.js.erb

✤ /groups/:id/posts への非同期のHTTP GETアクセス時に
   の JavaScript 処理を、app/views/posts.js.erb に直接書
   く方法もあります。

✤ この方法は、JavaScript の記述がapp/assets/javascripts/
   * と app/views/*.js.erb に散らばり見通しが悪くなる
JavaScriptのMVC
フレームワークの利用
✤ spine.js
✤ backbone.js
 ✤ model: リソース1つの操作をRESTfulに管理する
 ✤ collection: リソース複数の操作をRESTfulに管理する
 ✤ router: どのURIで何をするかを管理する
 ✤ view: どのDOM要素で何をするかを管理する
まとめ

✤ このように通常のHTTPリクエストと、非同期のHTTPリ
  クエストの組み合わせのページを作ることが多い昨今、
  RESTful APIとしてのRailsとクライアントとしての
  JavaScriptとの関係をどう記載するのかが重要となって
  きています。

✤ その際、通常のHTTPリクエストと非同期HTTPリクエス
  トを同じ統一インターフェースであるRESTfulな設計で
  管理すると一貫性が出て開発効率の向上につながる

More Related Content

PDF
Rails初心者レッスン lesson1 3rd edition
PPTX
本当にあった怖いJS
PPTX
Rubyによるクローラー開発
PPTX
Couch Db勉強会0623 by yssk22
PDF
Anemoneによるクローラー入門
PDF
私たちは何を Web っぽいと感じているのか
PDF
Web制作勉強会 #2
PDF
Crawler Commons
Rails初心者レッスン lesson1 3rd edition
本当にあった怖いJS
Rubyによるクローラー開発
Couch Db勉強会0623 by yssk22
Anemoneによるクローラー入門
私たちは何を Web っぽいと感じているのか
Web制作勉強会 #2
Crawler Commons

What's hot (20)

KEY
おすすめ gem
PPTX
Androidで使えるJSON-Javaライブラリ
PDF
ServerSideJavaScript
PPTX
サーバーとは
ODP
SPAのルーティングの話
PDF
JavascriptでRubyの作り方
PDF
Capybaraで雑にWebスクレイピング
PDF
Ruby風Swift NSOperation編
PDF
Active ldap の事例紹介
PDF
Lightweight C#
PDF
Ruby で扱う LDAP のススメ
PDF
Web ブラウザの仕組み
PPT
20090606
PDF
Haikara
PDF
PSMTabBarControl
PPTX
PDF
AWS小ネタ集
PDF
Web技術勉強会 第26回
PDF
200k/sec
PPTX
20080630
おすすめ gem
Androidで使えるJSON-Javaライブラリ
ServerSideJavaScript
サーバーとは
SPAのルーティングの話
JavascriptでRubyの作り方
Capybaraで雑にWebスクレイピング
Ruby風Swift NSOperation編
Active ldap の事例紹介
Lightweight C#
Ruby で扱う LDAP のススメ
Web ブラウザの仕組み
20090606
Haikara
PSMTabBarControl
AWS小ネタ集
Web技術勉強会 第26回
200k/sec
20080630
Ad

Viewers also liked (18)

PDF
Performance Optimization in Ruby
PDF
Ruby on Rails Primer
PDF
Rails api way in aiming
PPTX
Railsのフロントエンド開発を考える
PPT
PDF
プロボノワーカーが明日から使える 簡単 & 便利な 情報共有・情報収集ツール
PPT
アプリ開発コンテストApplicareの
PPTX
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
PPTX
治療に難渋した壊死性筋膜炎の一例
PDF
いまさら聞けないインフラ勉強会Vol.3~システム監視ツールバトル2013開催案内
PDF
Rails あるある
PDF
サウナによる熱中症の症例報告
PDF
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
PDF
プロジェクトマネジメントは仕組み化が9割
PDF
RESTful #とは RailsスタイルからRESTを学ぼう
PDF
Rest ful api設計入門
PDF
PHP実践 ~外部APIを使って情報を取得する~
PPTX
先端研読書会討論
Performance Optimization in Ruby
Ruby on Rails Primer
Rails api way in aiming
Railsのフロントエンド開発を考える
プロボノワーカーが明日から使える 簡単 & 便利な 情報共有・情報収集ツール
アプリ開発コンテストApplicareの
Railsエンジニアが サーバーレスアーキテクチャに 手を出したよ - 川崎Ruby会議01
治療に難渋した壊死性筋膜炎の一例
いまさら聞けないインフラ勉強会Vol.3~システム監視ツールバトル2013開催案内
Rails あるある
サウナによる熱中症の症例報告
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
プロジェクトマネジメントは仕組み化が9割
RESTful #とは RailsスタイルからRESTを学ぼう
Rest ful api設計入門
PHP実践 ~外部APIを使って情報を取得する~
先端研読書会討論
Ad

Similar to RESTful APIとしてのRailsとクライアントとしてのJavaScript (20)

PDF
AngularJSでの非同期処理の話
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PDF
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
PPTX
Express Web Application Framework
PDF
densan2014-late01
PDF
Rails3.1rc4を試してみた
PDF
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
PDF
イマドキの現場で使えるJavaライブラリ事情
PDF
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
PPTX
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
PPTX
今からでも遅くない! React事始め
PPT
Scala on Hadoop
PPT
Cubby 2006-08-23
PDF
はじめよう Backbone.js
PDF
RESTとRailsスタイル
PPTX
2016/12/17 ASP.NET フロントエンドタスク入門
PDF
ASP.NET シングル ページ アプリケーション (SPA) 詳説
PPTX
Angular js はまりどころ
PDF
react_rails
AngularJSでの非同期処理の話
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
Express Web Application Framework
densan2014-late01
Rails3.1rc4を試してみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
イマドキの現場で使えるJavaライブラリ事情
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
今からでも遅くない! React事始め
Scala on Hadoop
Cubby 2006-08-23
はじめよう Backbone.js
RESTとRailsスタイル
2016/12/17 ASP.NET フロントエンドタスク入門
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Angular js はまりどころ
react_rails

More from Naoto Koshikawa (20)

PDF
GeeksNightってなに
PDF
Faye使って見てる話 at MF Geeks Night 2015.04.21
PDF
最近挑戦していること at MF Geeks Night 2015.03.19
PDF
なぜRailsなのか
PDF
Qiita meetup for MoneyForward
PDF
20150114 GeeksNight
PDF
MF GeeksNight pplogの話
PDF
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
PPTX
Pplog rest
KEY
Sendagaya.rbのご紹介
KEY
Sendagaya.rb これまでを振り返ってみる
PDF
ビジネスモデル・ジェネレーションの紹介
KEY
リーン・スタートアップ読書会 第三部
KEY
heroku devcenter 翻訳プロジェクト へのお誘い
KEY
サービス開発者の読書会 #8「アジャイルサムライ」2012.6.19
KEY
サービス開発者の読書会 #8「アジャイルサムライ」2012.6.12
KEY
heroku devcenter読書会 #1 by sendagaya.rb
KEY
サービス開発者の読書会 #2「アジャイルサムライ」2012.4.26
KEY
love heroku?
GeeksNightってなに
Faye使って見てる話 at MF Geeks Night 2015.04.21
最近挑戦していること at MF Geeks Night 2015.03.19
なぜRailsなのか
Qiita meetup for MoneyForward
20150114 GeeksNight
MF GeeksNight pplogの話
YAPC::Asia Tokyo 2014 前夜祭 pplog by @ppworks
Pplog rest
Sendagaya.rbのご紹介
Sendagaya.rb これまでを振り返ってみる
ビジネスモデル・ジェネレーションの紹介
リーン・スタートアップ読書会 第三部
heroku devcenter 翻訳プロジェクト へのお誘い
サービス開発者の読書会 #8「アジャイルサムライ」2012.6.19
サービス開発者の読書会 #8「アジャイルサムライ」2012.6.12
heroku devcenter読書会 #1 by sendagaya.rb
サービス開発者の読書会 #2「アジャイルサムライ」2012.4.26
love heroku?

RESTful APIとしてのRailsとクライアントとしてのJavaScript