RESTモデルでリソースをネストする適切な方法は何ですか?


14

私はサービスのREST APIを設計しており、リソースをネストする適切な方法にこだわっています。

リソース:パートナー、チケット、設定

リソース間の接続:

  • パートナーには多くのチケットがあり、
  • パートナーは設定のセットを持っています、

Bussinesロジック:

  • すべてのパートナーを匿名ユーザーとしてリストできます。
  • 指定したパートナーに匿名ユーザーとして新しいチケットを追加できます。
  • パートナーのみが自分のチケットをリストできます。
  • パートナーのみがチケットを変更できます。
  • パートナーのみが設定を一覧表示できますが、
  • パートナーのみが設定を変更できますが、

私が今までやったこと:

パートナーリソース

GET / partners-すべてのパートナーを一覧
表示
GET / partners /:id- :idパラメーターで指定されたパートナーの詳細を表示GET / partners /:partner_id / tickets-パートナーのチケットの一覧
GET / partners /:partner_id / tickets /:id-詳細指定されたパートナーのチケットの
POST / partners /:partner_id / tickets-新しいチケット
PUTを保存する/ partners /:partner_id / tickets /:id-:idパラメーターで指定されたチケットを更新する
GET / partners /:partner_id / settings-パートナーの設定
PUTをリストする/ partners /:partner_id / settings-パートナーの設定を更新する

問題/質問

ネストされたリソース(チケット、設定)を分割してリソースを分離する、またはそれらを別個のリソースとして複製する適切な方法でしょうか?

例えば

GET / tickets /:id
POST / tickets
PUT / tickets /:id

GET / settings
PUT / settings

回答:


8

ハテオス

GET /partners/:partner_id/tickets -パートナーのチケットのリスト。つまり、おそらく次の形式のURIのリストを返します。 /tickets/:id

GET /partners/:partner_id/tickets/:id - 必要ありません

POST /partners/:partner_id/tickets -チケットを作成してパートナーに関連付け、次の形式の新しいURIで201を返します /tickets/:id


2
今、私はもっと理解しています。どうもありがとう:)しかし、パフォーマンスはどうですか?その状況を想定してみましょう:いくつかの短い情報でチケットのリストを作成したいとします。パートナーのチケットのリストを要求する必要があり、その後、各チケットを個別に要求します。私は正しいですか?
プシェメク

はい、そうです。または/partners/:partner_id/tickets、チケットの正規URIだけでなく、各チケットの有用なデータをリストに含めることもできます。たとえば、JSONの場合[{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}]、クライアントはすぐにいくつかのテーブルを表示し、追加の操作のためにチケットリソース全体をGET / PUTできます。
ハビエル

わかりました。
プルゼメク

ところで。/ partners /:partner_id / ticketsについては、パートナーまたはチケットリソースセクションでドキュメントを提供する必要がありますか?
プシェメク

@Javier DELETEはどうですか?DELETE /tickets/:id
メンディガオ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.