SlideShare a Scribd company logo
リソースモデリング
    パターンの提案
              @tkawa



2012.7.23 RailsにおけるRESTfulなURL設計勉強会
           Sendagaya.rb #12
@tkawa
         川村 徹

   RESTとかRailsとか
    書いてるブログ
http://d.hatena.ne.jp/tkawa/

   うつの予防と回復
  Web認知行動療法
 U2plus http://u2plus.jp/
URL設計(リソース設計)
        いろんな選択肢がある
•   例えば、URLの階層構造について、どれを選択す
    る?

    •   /users , /user/{id}

    •   /users/user/{id}

    •   /users/{id}

    •   /users/user-{id}

•   さらに、HTTPメソッドとの対応はどうする?

                           くわしくは http://d.hatena.ne.jp/tkawa/20120103/p1
Railsだと
    Hoge::Application.routes.draw do
      resources :users
    end

•   URLの構造も、HTTPメソッドとの対応もこ
    れだけで決まる

•   リソース設計の「パターン」を提供している

•   ベストプラクティス
「リソースモデリングパターン」

•   どのパターンかを判断するだけで、既存の
    Good Practiceが適用できる

•   もっとあるはず!

•   名前をつけて呼べるようにしたい

•   (できれば)Railsで簡単に書けるようにし
    たい
まず、リソースを
分類してみた
リソース大分類
•   コレクションリソース
•   メンバーリソース
•   単数(Singular, Singleton)リソース
•   補助リソース
•   アルゴリズムリソース
•   静的リソース
•   ルートリソース
•   その他…
コレクションリソース
      メンバーリソース
     /{name}      /{name}/{id}

•   同じ種類のデータのまとまり
    →コレクションリソース
    その中の個別のデータ
    →メンバーリソース

•   コレクション名に“/”でIDをつなげることで
    階層構造とする
Collection & Member
   Resource パターン
• Railsの “resources”
• 2種類のリソースをまとめて、使用する
   メソッドを限定

• コレクションリソースがFactoryとなる
               GET     POST      PUT     DELETE

  /{name}      index   create     -         -

/{name}/{id}   show      -      update   destroy
単数(Singular, Singleton)
       リソース
         /{name}

• ただ1つしかないリソース
  • あるリソースに対して1つしかない
  • セッションに対して1つしかない
• /users/123/profile
Singular(Singleton)
   Resource パターン

• Railsの “resource”

           GET    POST      PUT     DELETE

 /{name}   show   create   update   destroy
補助リソース
            /{name}/new

      /{name}/{id}/preview

•   主にHTMLのUIのために必要となる、データ
    の中身には関係のないリソース

•   GETのみ

(命名規則を考え直すべきでは? _new とか)
アルゴリズムリソース
         /search?q={query}

/conversion?from=USD&to=JPY&amount=100

  • クエリパラメータによって、何らかのア
    ルゴリズムを実行した結果のリソース

  • 基本的にGETのみ
静的リソース

• 画像とかJavaScriptとかCSSとか
• Railsや、Webアプリケーションフレーム
 ワーク特有の分類かもしれない

• GETのみ
ルートリソース
           /

• 他のリソースへのナビゲーション的役割
 (GETのみ)

• もしくは、サービスの主となるリソース
 (コレクションリソースが多い)の別名
もう少し具体的な
パターンを探してみた
Filtered Collection
         パターン
         /users?role=admin

•   コレクションリソース
    +アルゴリズムリソース

•   コレクションリソースから、クエリパラメー
    タの値を条件として絞り込む

•   meta_search (gem)などが実装
Filtered Collection
       パターン
        /users?page=2

     /users?since_id=123


• ページネーション
• kaminari (gem)などが実装
Filtered Subresource
          パターン
         /users/admin

•   汎用的なら、子リソースとしても表現できる

•   コレクションリソースの一種

•   IDと衝突注意

(実はこれをすんなり resources で書く手段がな
いが、GETのみなのでいいのかも)
Multi-member
 Resource パターン
    /users/123,124

    /users/123-133

• メンバーリソースの派生形
• 複数のメンバーリソースを一度に取
 得、更新、削除するために提供
Partial Resource
         パターン
      /users/123/name,email

or /users/123?fields=name,email

 • リソースの部分取得、部分更新のため
   に一部の属性(フィールド)だけを提
   供する
Transaction Resource
       パターン
POST /transactions
PUT /transactions/123
PUT /transactions/123/committed

• 主にCollection & Member Resource パ
  ターンを用いたトランザクションの実装

• ウィザードなどにも適用可能
Session Resource
          パターン
 ログイン       POST /session
ログアウト       DELETE /session

•   認証のセッション自体をリソースととらえ
    る(モデルではないリソースの典型例)

•   Railsの認証gemではすでに一般的
    (Deviseや Sorcery, OmniAuthのドキュメント)
Private Resource
(Namespace) パターン
       /my/{resource}

• Singular Resource パターンの特別な場合
• 「自分自身」を指す特別なリソース
• 人によって違うリソースを指すことを
 明示するため、名前空間を分ける
意見ください
• ほんとうに役立つか
• これはパターンと言えるのか
• だいぶ粒度がバラバラ
• 名前の付け方(パターンは名前重要)
• まとめてどこかに書きたい! 本?
•   Collection & Member Resource パターン

•   Singular(Singleton) Resource パターン

•   Filtered Collection パターン

•   Filtered Subresource パターン

•   Multi-member Resource パターン

•   Partial Resource パターン

•   Transaction Resource パターン

•   Session Resource パターン

•   Private Resource (Namespace) パターン

More Related Content

What's hot

Drupalテーマとthemingの基礎
Drupalテーマとthemingの基礎Drupalテーマとthemingの基礎
Drupalテーマとthemingの基礎
Kenji Shirane
 
WordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまでWordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまで
Takashi Uemura
 
CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)
Kenji Shirane
 
D8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法についてD8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法について
Kenji Shirane
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
Shuhei Iitsuka
 
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識Nao Oec
 
Drupal勉強会@さっぽろ/おたる ご紹介
Drupal勉強会@さっぽろ/おたる ご紹介Drupal勉強会@さっぽろ/おたる ご紹介
Drupal勉強会@さっぽろ/おたる ご紹介
Kenji Shirane
 
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014
Naoki Shimizu
 
初めての REST - Representational State Transfer
初めての REST - Representational State Transfer初めての REST - Representational State Transfer
初めての REST - Representational State Transfer
Tatsumi Naganuma
 
Railsによるurlの描き方
Railsによるurlの描き方Railsによるurlの描き方
Railsによるurlの描き方
Jun Fukaya
 
Silverlight(wp7) で ローカル db 使ってみよう
Silverlight(wp7) で ローカル db 使ってみようSilverlight(wp7) で ローカル db 使ってみよう
Silverlight(wp7) で ローカル db 使ってみようOda Shinsuke
 

What's hot (11)

Drupalテーマとthemingの基礎
Drupalテーマとthemingの基礎Drupalテーマとthemingの基礎
Drupalテーマとthemingの基礎
 
WordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまでWordPress実践 導入からカスタマイズまで
WordPress実践 導入からカスタマイズまで
 
CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)CMSMix Sapporo vol.3 (Drupal の回)
CMSMix Sapporo vol.3 (Drupal の回)
 
D8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法についてD8でコンテンツをレイアウトする手法について
D8でコンテンツをレイアウトする手法について
 
ウェブから情報をあつめる
ウェブから情報をあつめるウェブから情報をあつめる
ウェブから情報をあつめる
 
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
Shizuokapy4_データヴィジュアライズのための簡単なWeb API開発まめ知識
 
Drupal勉強会@さっぽろ/おたる ご紹介
Drupal勉強会@さっぽろ/おたる ご紹介Drupal勉強会@さっぽろ/おたる ご紹介
Drupal勉強会@さっぽろ/おたる ご紹介
 
JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014JSON Schema と API テスト YAPC::Asia Tokyo 2014
JSON Schema と API テスト YAPC::Asia Tokyo 2014
 
初めての REST - Representational State Transfer
初めての REST - Representational State Transfer初めての REST - Representational State Transfer
初めての REST - Representational State Transfer
 
Railsによるurlの描き方
Railsによるurlの描き方Railsによるurlの描き方
Railsによるurlの描き方
 
Silverlight(wp7) で ローカル db 使ってみよう
Silverlight(wp7) で ローカル db 使ってみようSilverlight(wp7) で ローカル db 使ってみよう
Silverlight(wp7) で ローカル db 使ってみよう
 

Viewers also liked

20150215勉強会
20150215勉強会20150215勉強会
20150215勉強会
Fumiya Sakai
 
台湾官公庁におけるRuby on Railsを導入する事例
台湾官公庁におけるRuby on Railsを導入する事例台湾官公庁におけるRuby on Railsを導入する事例
台湾官公庁におけるRuby on Railsを導入する事例
Tsehau Chao
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
Shou Takenaka
 
RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部
RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部 RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部
RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部
kanjinishiyama3434
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
豊明 尾古
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
Yuichiro Shibata
 
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)codeal
 
なぜ「教育のためのTOC」か?
なぜ「教育のためのTOC」か?なぜ「教育のためのTOC」か?
なぜ「教育のためのTOC」か?
TOC for Education, Japan Branch
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
 

Viewers also liked (10)

20150215勉強会
20150215勉強会20150215勉強会
20150215勉強会
 
台湾官公庁におけるRuby on Railsを導入する事例
台湾官公庁におけるRuby on Railsを導入する事例台湾官公庁におけるRuby on Railsを導入する事例
台湾官公庁におけるRuby on Railsを導入する事例
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
 
RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部
RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部 RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部
RailsでつくるTwitterアプリ Ruby / Ruby on Rails ビギナーズ倶楽部
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
 
Rails templateで開発の初速を上げよう
Rails templateで開発の初速を上げようRails templateで開発の初速を上げよう
Rails templateで開発の初速を上げよう
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
 
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
[コデアル株式会社] Ruby on rails 開発環境設定勉強会(株式会社シンクスマイル主催)
 
なぜ「教育のためのTOC」か?
なぜ「教育のためのTOC」か?なぜ「教育のためのTOC」か?
なぜ「教育のためのTOC」か?
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
 

Similar to リソースモデリングパターンの提案 #sendagayarb

OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
Siena. N
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
 
Ruby on Rails の規約
Ruby on Rails の規約Ruby on Rails の規約
Ruby on Rails の規約
Shuhei Iitsuka
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座Shinichi Nishikawa
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
Yukio Saito
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
 
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyBeginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyikeyat
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Toru Kawamura
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
kenjis
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1kenjis
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
Shinichi Nishikawa
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
Fumito Mizuno
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
 
Azure Datalake 大全
Azure Datalake 大全Azure Datalake 大全
Azure Datalake 大全
Daiyu Hatakeyama
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
Akinari Tsugo
 

Similar to リソースモデリングパターンの提案 #sendagayarb (20)

OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会OSC2008 Tokyo/Spring REST勉強夜会
OSC2008 Tokyo/Spring REST勉強夜会
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
Ruby on Rails の規約
Ruby on Rails の規約Ruby on Rails の規約
Ruby on Rails の規約
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄45分で理解する webクローリング入門 斉藤之雄
45分で理解する webクローリング入門 斉藤之雄
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
 
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_studyBeginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版)
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
REST 入門
REST 入門REST 入門
REST 入門
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
Azure Datalake 大全
Azure Datalake 大全Azure Datalake 大全
Azure Datalake 大全
 
RESTful Web API Design
RESTful Web API DesignRESTful Web API Design
RESTful Web API Design
 

More from Toru Kawamura

真のREST
真のREST真のREST
真のREST
Toru Kawamura
 
RailsスタイルからRESTを学ぼう よちがや.rb
RailsスタイルからRESTを学ぼう よちがや.rbRailsスタイルからRESTを学ぼう よちがや.rb
RailsスタイルからRESTを学ぼう よちがや.rb
Toru Kawamura
 
Web Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureWeb Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the future
Toru Kawamura
 
RESTful #とは RailsスタイルからRESTを学ぼう
RESTful #とは RailsスタイルからRESTを学ぼうRESTful #とは RailsスタイルからRESTを学ぼう
RESTful #とは RailsスタイルからRESTを学ぼう
Toru Kawamura
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in RailsHypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Toru Kawamura
 
RESTful Meetup vol.3 Introduction
RESTful Meetup vol.3 IntroductionRESTful Meetup vol.3 Introduction
RESTful Meetup vol.3 Introduction
Toru Kawamura
 
Rails Gems realize RESTful modeling patterns
Rails Gems realize RESTful modeling patternsRails Gems realize RESTful modeling patterns
Rails Gems realize RESTful modeling patterns
Toru Kawamura
 
routes.rb をもう一度考えてみた #shibuyarb
routes.rb をもう一度考えてみた #shibuyarbroutes.rb をもう一度考えてみた #shibuyarb
routes.rb をもう一度考えてみた #shibuyarb
Toru Kawamura
 
返信と@ツイートの仕様変更と提案 #twtr_hack
返信と@ツイートの仕様変更と提案 #twtr_hack返信と@ツイートの仕様変更と提案 #twtr_hack
返信と@ツイートの仕様変更と提案 #twtr_hackToru Kawamura
 
OAuth Echo の Rails Gem
OAuth Echo の Rails GemOAuth Echo の Rails Gem
OAuth Echo の Rails Gem
Toru Kawamura
 

More from Toru Kawamura (10)

真のREST
真のREST真のREST
真のREST
 
RailsスタイルからRESTを学ぼう よちがや.rb
RailsスタイルからRESTを学ぼう よちがや.rbRailsスタイルからRESTを学ぼう よちがや.rb
RailsスタイルからRESTを学ぼう よちがや.rb
 
Web Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureWeb Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the future
 
RESTful #とは RailsスタイルからRESTを学ぼう
RESTful #とは RailsスタイルからRESTを学ぼうRESTful #とは RailsスタイルからRESTを学ぼう
RESTful #とは RailsスタイルからRESTを学ぼう
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in RailsHypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
 
RESTful Meetup vol.3 Introduction
RESTful Meetup vol.3 IntroductionRESTful Meetup vol.3 Introduction
RESTful Meetup vol.3 Introduction
 
Rails Gems realize RESTful modeling patterns
Rails Gems realize RESTful modeling patternsRails Gems realize RESTful modeling patterns
Rails Gems realize RESTful modeling patterns
 
routes.rb をもう一度考えてみた #shibuyarb
routes.rb をもう一度考えてみた #shibuyarbroutes.rb をもう一度考えてみた #shibuyarb
routes.rb をもう一度考えてみた #shibuyarb
 
返信と@ツイートの仕様変更と提案 #twtr_hack
返信と@ツイートの仕様変更と提案 #twtr_hack返信と@ツイートの仕様変更と提案 #twtr_hack
返信と@ツイートの仕様変更と提案 #twtr_hack
 
OAuth Echo の Rails Gem
OAuth Echo の Rails GemOAuth Echo の Rails Gem
OAuth Echo の Rails Gem
 

Recently uploaded

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 

Recently uploaded (15)

FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 

リソースモデリングパターンの提案 #sendagayarb

  • 1. リソースモデリング パターンの提案 @tkawa 2012.7.23 RailsにおけるRESTfulなURL設計勉強会 Sendagaya.rb #12
  • 2. @tkawa 川村 徹 RESTとかRailsとか 書いてるブログ http://d.hatena.ne.jp/tkawa/ うつの予防と回復 Web認知行動療法 U2plus http://u2plus.jp/
  • 3. URL設計(リソース設計) いろんな選択肢がある • 例えば、URLの階層構造について、どれを選択す る? • /users , /user/{id} • /users/user/{id} • /users/{id} • /users/user-{id} • さらに、HTTPメソッドとの対応はどうする? くわしくは http://d.hatena.ne.jp/tkawa/20120103/p1
  • 4. Railsだと Hoge::Application.routes.draw do   resources :users end • URLの構造も、HTTPメソッドとの対応もこ れだけで決まる • リソース設計の「パターン」を提供している • ベストプラクティス
  • 5. 「リソースモデリングパターン」 • どのパターンかを判断するだけで、既存の Good Practiceが適用できる • もっとあるはず! • 名前をつけて呼べるようにしたい • (できれば)Railsで簡単に書けるようにし たい
  • 7. リソース大分類 • コレクションリソース • メンバーリソース • 単数(Singular, Singleton)リソース • 補助リソース • アルゴリズムリソース • 静的リソース • ルートリソース • その他…
  • 8. コレクションリソース メンバーリソース /{name} /{name}/{id} • 同じ種類のデータのまとまり →コレクションリソース その中の個別のデータ →メンバーリソース • コレクション名に“/”でIDをつなげることで 階層構造とする
  • 9. Collection & Member Resource パターン • Railsの “resources” • 2種類のリソースをまとめて、使用する メソッドを限定 • コレクションリソースがFactoryとなる GET POST PUT DELETE /{name} index create - - /{name}/{id} show - update destroy
  • 10. 単数(Singular, Singleton) リソース /{name} • ただ1つしかないリソース • あるリソースに対して1つしかない • セッションに対して1つしかない • /users/123/profile
  • 11. Singular(Singleton) Resource パターン • Railsの “resource” GET POST PUT DELETE /{name} show create update destroy
  • 12. 補助リソース /{name}/new /{name}/{id}/preview • 主にHTMLのUIのために必要となる、データ の中身には関係のないリソース • GETのみ (命名規則を考え直すべきでは? _new とか)
  • 13. アルゴリズムリソース /search?q={query} /conversion?from=USD&to=JPY&amount=100 • クエリパラメータによって、何らかのア ルゴリズムを実行した結果のリソース • 基本的にGETのみ
  • 15. ルートリソース / • 他のリソースへのナビゲーション的役割 (GETのみ) • もしくは、サービスの主となるリソース (コレクションリソースが多い)の別名
  • 17. Filtered Collection パターン /users?role=admin • コレクションリソース +アルゴリズムリソース • コレクションリソースから、クエリパラメー タの値を条件として絞り込む • meta_search (gem)などが実装
  • 18. Filtered Collection パターン /users?page=2 /users?since_id=123 • ページネーション • kaminari (gem)などが実装
  • 19. Filtered Subresource パターン /users/admin • 汎用的なら、子リソースとしても表現できる • コレクションリソースの一種 • IDと衝突注意 (実はこれをすんなり resources で書く手段がな いが、GETのみなのでいいのかも)
  • 20. Multi-member Resource パターン /users/123,124 /users/123-133 • メンバーリソースの派生形 • 複数のメンバーリソースを一度に取 得、更新、削除するために提供
  • 21. Partial Resource パターン /users/123/name,email or /users/123?fields=name,email • リソースの部分取得、部分更新のため に一部の属性(フィールド)だけを提 供する
  • 22. Transaction Resource パターン POST /transactions PUT /transactions/123 PUT /transactions/123/committed • 主にCollection & Member Resource パ ターンを用いたトランザクションの実装 • ウィザードなどにも適用可能
  • 23. Session Resource パターン ログイン POST /session ログアウト DELETE /session • 認証のセッション自体をリソースととらえ る(モデルではないリソースの典型例) • Railsの認証gemではすでに一般的 (Deviseや Sorcery, OmniAuthのドキュメント)
  • 24. Private Resource (Namespace) パターン /my/{resource} • Singular Resource パターンの特別な場合 • 「自分自身」を指す特別なリソース • 人によって違うリソースを指すことを 明示するため、名前空間を分ける
  • 25. 意見ください • ほんとうに役立つか • これはパターンと言えるのか • だいぶ粒度がバラバラ • 名前の付け方(パターンは名前重要) • まとめてどこかに書きたい! 本?
  • 26. Collection & Member Resource パターン • Singular(Singleton) Resource パターン • Filtered Collection パターン • Filtered Subresource パターン • Multi-member Resource パターン • Partial Resource パターン • Transaction Resource パターン • Session Resource パターン • Private Resource (Namespace) パターン