Filtered Subresource パターン
/users/admin
Filtered Collection パターンのうち、汎用的なものであれば、子リソースとしても表現できる。コレクションリソースの一種。
ただし、メンバーリソースのIDと衝突する可能性があるので注意しなければならない。(これも補助リソースのように命名規則が欲しいところ)
使用メソッド
基本的にGETのみ。
Rails routes.rb の書き方
resources :users do collection do get :admin end end
Filtered Collection パターン
/users?role=admin /users?page=2 /users?since_id=123
どのようなパターン?
コレクションリソースにアルゴリズムリソースを組み合わせて用いる形。
コレクションリソースから、クエリパラメータの値を条件として絞り込んだリソースを表す。
RailsのGemでは、「検索」としては Ransack (meta_search) などが実装している。 「ページネーション」としては kaminari などが実装している。
リソースの分類からみる
アルゴリズムリソース
/search?q={query} /conversion?from=USD&to=JPY&amount=100
クエリパラメータによって、何らかのアルゴリズムを実行した結果のリソース。
使用メソッド
基本的にGETのみ。
クエリパラメータが長すぎる場合はPOST(overloaded POST)を使用することもある。
Singular (Singleton) Resource パターン
/profile
どのようなパターン?
同じ種類がたくさんあるコレクションリソースに対して、ただ1つしかないリソース(単数リソース)のパターン。
使用メソッドとの組み合わせ
Railsのアクション名を例に挙げる。
GET | POST | PUT | DELETE | |
---|---|---|---|---|
/{name} |
show | create | update | destroy |
リソースの分類からみる
単数 (Singleton, Singular) リソース
/{name}
ただ1つしかないリソース。
例
グローバルに1つしかない
/status
サービスの状態を表す (id:bekkou68 さんのコメントより)
あるリソースに対して1つしかない
/users/123/profile
セッションに対して1つしかない
/my/profile
→ Private Resource パターン
Rails routes.rb の書き方
# /profile の場合 resource :profile
Collection & Member Resource パターン
/users /users/123
どのようなパターン?
コレクションリソースとメンバーリソースの2種類のリソースをひとまとめとして扱い、使用するメソッドを限定する。
コレクションリソースがFactoryの役割も果たす。
Railsのリソース設計では基本となるパターンであり、9割方これで済むといっても過言ではない。(なので用途を絞った派生パターンを考えていく必要がある:Transaction Resource パターンなど)
使用メソッドとの組み合わせ
Railsのアクション名を例に挙げる。
GET | POST | PUT | DELETE | |
---|---|---|---|---|
/{name} |
index | create | - | - |
/{name}/{id} |
show | - | update | destroy |
すべてを使うことはまれなため、8種類中5種類に使用を限定しているのがポイント。
リソースの分類からみる
/{name} (コレクションリソース) /{name}/{id} (メンバーリソース)
同じ種類のデータのまとまりを「コレクションリソース」、その中の個別のデータを「メンバーリソース」と呼ぶ。
コレクション名に“/
”でIDをつなげることで階層構造とする点が特徴。
例
GET /users
ユーザ全体を取得。
POST /users
新しいユーザのリソースを作成(Factory)。
主なステータス:201 Created, 302 Found, 303 See Other
GET /users/123
ID=123のユーザのリソースを取得。
PUT /users/123
ID=123のユーザのリソースを変更。
DELETE /users/123
ID=123のユーザのリソースを削除。
補助リソース
/{name}/new /{name}/{id}/preview
主にHTMLのUIのために必要となる、データの中身には関係のないリソース。
Railsでresources
を使用すると、上記の5種類のアクションに加えて、new
, edit
の2つのアクションが作られる。これが補助リソースである。
あくまでフォームを表示するだけのリソースであるため、実装によっては必要ない。
メンバーリソースのIDと衝突しないように注意。_new
のようにアンダースコアをつけるなどの命名規則を導入すれば回避できる。
Rails routes.rb の書き方
# /users # /users/id の場合 resources :users