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_study
ikeyat
 
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.1
kenjis
 
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_hack
Toru 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

MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツールMOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
TsuyoshiSaito7
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
Sony - Neural Network Libraries
 
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
shogotaguchi
 
能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて
能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて
能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて
Tetsuya Nihonmatsu
 
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
Tatsuya Ishikawa
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
Takayuki Nakayama
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo Lab
 
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
TsuyoshiSaito7
 
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
iPride Co., Ltd.
 
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
Hironori Washizaki
 
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
Takuya Minagawa
 

Recently uploaded (11)

MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツールMOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
MOSHI: 革新的な音声AI QAIが開発した次世代のコミュニケーションツール
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
 
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
「福利厚生をコストから投資へ」AIで社員1人ひとりに最適な支援を届ける 全く新しいカフェテリアプラン
 
能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて
能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて
能動的サイバー防御の時代へ - GPTsから垣間見えた私達と未来のAIについて
 
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
2024/07/04 Blazor+ローコードで実現する.NET資産のモダナイズ
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
 
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
【GPT4-o越えのリアルタイム会話AI】kyutai labsのMoshiデモ動画を解説
 
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
MySQLの文字コードと照合順序について 2024/07/05の勉強会で発表されたものです。
 
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
「スマートエスイー」におけるスマートシステム&サービスおよびDX推進人材の産学連携育成ならびに参照モデルに基づく育成プログラム分析
 
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
第61回CV勉強会「CVPR2024読み会」(前編)発表資料:State Space Models for Event Cameras
 

リソースモデリングパターンの提案 #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) パターン