[解決済み] RESTのネストされたリソースのベストプラクティスは何ですか?
質問
私が知る限り、個々のリソースには カノニカルは1つだけ のパスが必要です。 では、次の例では、どのようなURLパターンが良いのでしょうか?
例えば、会社のリスト表現を考えてみましょう。この仮想の例では、各企業が 所有 0以上の部門と各部門 所有 0人以上の従業員がいること。
A部門 存在しえない 関連する会社がない場合。
従業員 存在しえない 関連する部門がない場合。
今なら、リソースパターンの自然な表現が見つかりますね。
-
/companies
企業の集合体 - 新しい会社のputを受け付けます。コレクション全体に対して取得する。 -
/companies/{companyId}
個々の企業。GET、PUT、DELETEを受け付けます。 -
/companies/{companyId}/departments
新規項目のPOSTを受け付けます。(社内に部署を作成します) -
/companies/{companyId}/departments/{departmentId}/
-
/companies/{companyId}/departments/{departmentId}/employees
-
/companies/{companyId}/departments/{departmentId}/employees/{empId}
各セクションの制約を考えると、少し深いネストでも意味がある気がします。
しかし、私が苦労しているのは、リストアップしたい場合です(
GET
) 全社の全従業員を対象とする。
そのためのリソースパターンは、最も身近なところでは
/employees
(全従業員のコレクション)
ということなのでしょうか?
/employees/{empId}
なぜなら、もしそうなら、同じリソースを取得するために2つのURIが存在することになるからです。
あるいは、スキーマ全体をフラット化すべきかもしれませんが、そうすると社員はネストしたトップレベルのオブジェクトになってしまいます。
基本的なレベルでは
/employees/?company={companyId}&department={deptId}
は、最も深くネストされたパターンとまったく同じ従業員のビューを返します。
URLパターンにおいて、リソースが 所有 は他のリソースに依存しているが、個別にクエリ可能であるべきですか?
どのように解決するのですか?
あなたが行ったことは正しいです。 一般に、同じリソースに対して多くのURIを指定することができます。
そして一般的には、アイテムに直接、あるいは何かのサブセットとしてアクセスする必要があるかもしれません - ですから、あなたの構造は理にかなっていると思います。
社員が部署でアクセスできるようになっただけで
company/{companyid}/department/{departmentid}/employees
会社の下でもアクセスできないわけではありません。
company/{companyid}/employees
その会社の社員を返してくれるのはどちらでしょう。 それは、消費者であるクライアントが何を必要としているかに依存するものです。
しかし、すべてのURLハンドラーが同じバッキングコードを使用してリクエストを満たすようにし、コードの重複がないようにしたいものです。
関連
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
-
[解決済み] cURLを使ってCookieを送信するには?
-
[解決済み] RESTのネストされたリソースのベストプラクティスは何ですか?
-
[解決済み] REST Web アプリケーションのページネーション
-
[解決済み】有効なリクエストでありながら、データが空の場合の適切なRESTレスポンスコードは何ですか?
-
[解決済み】API paginationのベストプラクティス
-
[解決済み] オブジェクト内のアイテムの合計数を返すための最良のRESTfulメソッドは何ですか?
-
[解決済み] HATEOAS(REST-architecture)の実例集 [終了しました]。
-
[解決済み] NetflixやTwitterのようなWebサービスにはRESTとSOAPのどちらを使うべきか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] RESTリソースの命名規則はSingularとPluralのどちらを使用すべきですか?
-
[解決済み] RESTアプリケーションはステートレスであることが前提である場合、セッションはどのように管理するのですか?
-
[解決済み] cURLでPUTリクエストを行うには?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み] HTTP DELETEでリソースを2回目に削除したときのステータスコード
-
[解決済み] リソースとエンドポイントの違いは何ですか?
-
[解決済み] RESTのPUT/POST/DELETEコールは、規約によって何を返すべきですか?
-
[解決済み] RESTでトランザクション?
-
[解決済み] HATEOAS(REST-architecture)の実例集 [終了しました]。