7
URI対クエリ文字列によるREST APIの設計
次のような3つのリソースがあるとします。 Grandparent (collection) -> Parent (collection) -> and Child (collection) 上記は、これらのリソース間の関係を示しています。各祖父母は、1つまたは複数の親にマップできます。各親は、1つまたは複数の子にマップできます。子リソースに対する検索をサポートする機能が必要ですが、フィルター条件があります。 クライアントが祖父母へのID参照を渡した場合、その祖父母の直接の子孫である子供に対してのみ検索したいです。 クライアントが親へのID参照を渡した場合、親の直接の子孫である子に対してのみ検索したいです。 私はそのようなことを考えました: GET /myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text} そして GET /myservice/api/v1/parents/{parentID}/children?search={text} 上記の要件に対して、それぞれ。 しかし、私はこのようなこともできます: GET /myservice/api/v1/children?search={text}&grandparentID={id}&parentID=${id} この設計では、クライアントにクエリ文字列のいずれかを渡すことができます:grandparentIDまたはparentIDのいずれかで、両方ではありません。 私の質問は: 1)どのAPI設計がよりRESTfulであり、その理由は何ですか?意味的には、同じ意味であり、同じように動作します。URIの最後のリソースは「子」であり、事実上、クライアントが子リソースを操作していることを意味します。 2)クライアントの観点からの理解可能性、およびデザイナーの観点からの保守性という点で、それぞれの長所と短所は何ですか。 3)リソースの「フィルタリング」以外に、実際に使用されるクエリ文字列は何ですか?最初の方法を使用する場合、フィルターパラメーターは、クエリ文字列パラメーターではなく、パスパラメーターとしてURI自体に埋め込まれます。 ありがとう!