Person、Movieの2つのリソースがあるとします。集計データに基づいて問合せを行うためのRESTfulエンドポイントの設計
persons/123
{id: 123, firstName: "John", lastName:"Travolta"}
persons/124
{id: 124, firstName: "Uma", lastName: "Thurman"}
persons/125
{id: 125, firstName: "Bob", lastName: "Saget"}
persons/126
{id: 126, firstName: "Christopher", lastName: "Walken"}
persons/127
{id: 127, firstName: "Steve", lastName: "Buscemi"}
movies/1
{id: 1, name: "Pulp Fiction"}
movies/2
{id:2, name: "Reservoir Dogs"}
はその後、両者を関連付けるために、我々は別のリソースを持っている:私は、クリストファー・ウォーケンがでてきた映画のすべてを見たい場合は、私はこれを行うことができます知っているメンバー
GET cast-members?movie.name=Pulp%20Fiction
[
{
id: 502,
movie: {id: 1, name: "Pulp Fiction"}
actor: {id: 123, firstName: "John", lastName:"Travolta"},
character: "Vincent Vega"
},
{
id: 503,
movie: {id: 1, name: "Pulp Fiction"}
actor: {id: 124, firstName: "Uma", lastName: "Thurman"},
character: "Mia Wallace"
},
{
id: 504,
movie: {id: 1, name: "Pulp Fiction"}
actor: {id: 126, firstName: "Christopher", lastName: "Walken"},
character: "Buddy Holly"
},
...
]
キャスト:
GET cast-members?actor.id=125
私はすべての映画を見たい場合はユマ・サーマンとジョン・トラボルタの両方がキャストに何をしているところ?このエンドポイントはどのように見えますか?
GET cast-members?actor.id=124&actor.id=125
は機能しません。
キャストメンバーを返します。ここで、actor.idは124または125のいずれかでしたか?
[
{
id: 587,
movie: {id: 10, name: "Kill Bill"},
// John's not in this movie
actor: {id: 124, firstName: "Uma", lastName: "Thurman"},
character: "The Bride"
},
{
id: 597,
movie: {id: 11, name: "Saturday Night Fever"},
// Uma's not in this movie
actor: {id: 123, firstName: "John", lastName:"Travolta"},
character: "Tony Manero"
},
...
]
それは我々ができるようになる前に、大量のデータをページングしなければならないことを意味するので、我々は望ましくないとする(クライアント側で映画に参加しなければならないので、これは、我々が望むものではありません結果を返す)。
SQLクエリは、このようになります:
SELECT Movie
FROM CastMember
WHERE Actor in (124, 125)
GROUP BY Movie
HAVING COUNT(DISTINCT Actor) = 2
はRESTfulな理にかなって何かにこのクエリを変換する方法がありますか?
はい、HTMLフォームに同じ名前の複数のフィールドがある場合と同様に、IDの配列を渡すことができます。しかし、私はこれ以上あなたを助けることはできません、私は他の人が完全な答えで来ると思います。 – watery
なぜ同じクエリパラメータ 'actor.id'を使用しないのですか?どのようなバックエンドを使用していますか? –
@DisplayName 2つのアクタを渡すと、&&または||のいずれかが表示されます。だからactor.id = 123 && actor.id = 124は何も返しません、actor.id = 123 || actor.id = 124は映画ではグループ化しません。 –