多対多の関係であるチームとプレイヤーを含む RESTful API があるとします。
次の方法で、特定のチームのプレーヤーを取得できます。
GET /api/team/{team_id}/players
もっと複雑なクエリをいくつか作成したいのですが、URI 設計のベスト プラクティスがどれかわかりません。
具体的には、次のことを行います。
- どのチームにも所属していない選手を取得します。
- 特定のチームに所属していない選手を取得します。
これに最適なアプローチは何ですか?
多対多の関係であるチームとプレイヤーを含む RESTful API があるとします。
次の方法で、特定のチームのプレーヤーを取得できます。
GET /api/team/{team_id}/players
もっと複雑なクエリをいくつか作成したいのですが、URI 設計のベスト プラクティスがどれかわかりません。
具体的には、次のことを行います。
これに最適なアプローチは何ですか?
チームとプレイヤーが多対多の関係にある場合、個人的にはこの URI デザインを使用しません。プレーヤーが複数のチームでプレーできる場合、一意ではないプレーヤー uris になります。たとえば、特定のプレーヤーがチーム 5 とチーム 6 の両方でプレーしている場合、次の両方の URI で表すことができます (チームとプレーヤーの両方に数値 ID があると仮定します)。
/api/team/5/players/4
/api/team/6/players/4
代わりに、この uri でプレーヤーを表すことができます。
/api/players/4
そして、これらの URI を持つ各チーム (一貫性のために複数化されています)
/api/teams/5
/api/teams/6
次に、このようなチームのメンバーを検索できます
/api/players?team=5
NOT IN クエリは解釈の余地がありますが、django モデル フィルターがどのように機能し、次の行に沿って接尾辞付きのクエリ パラメーターを導入するのと同様のことができます。
/api/players?team_ne=5
どのチームにも所属していないプレイヤーには、いくつかの選択肢があります
/api/players?team=
/api/players?team=none
おそらく、それらの2番目はそれほどあいまいではありません
次のようなルート構文
/api/team/{team_id}/players
定義された team_id が常に必要です。
このプロパティでフィルタリングするには、GET パラメータを使用します。