次の URI を指定します。
/myapp/books/status/{status}
例えば :
/myapp/books/status/new
これにより、このステータスのフラグが付けられたすべての書籍が返されます。
特定のステータスのフラグが付いていないすべての本を返すための適切な URI は?
/myapp/books/notstatus/new
特定のステータスの本を除いて、すべての本のコレクションを返したい..
ご意見をお聞かせください...
書籍リスト リソースのステータスをフィルタリングするには、クエリ パラメータを使用することをお勧めします。
myapp/books/?status=new
myapp/books/?status=not_new
どちらのクエリも同じリソース (書籍のリスト) を返します。そのリストで必要なタイプを除外しているだけなので、クエリ パラメータの使用は理にかなっています。ステータスの前に付けられた を使用not_
して逆クエリを実行しますが、任意の規則を使用できます。
REST では、get パラメーターを避ける必要はありません (get パラメーターはブードゥー教だと考える人もいるようです)。
私がこの方法を気に入っている理由は、状態が新品で状態が良いものなど、複数の情報を含むすべての本にチェックを追加したい場合に、後で選択肢が広がるからです。
myapp/books/?status=new&condition=good
それをクエリ パラメータではなく URL セグメントに分割しようとすると、すぐに面倒になってしまいます。
私が知っているように、いくつかの方法があり、それらはすべて正しいです (REST の観点から):
myapp/books?status=new
myapp/books?$filter=status eq 'new'
myapp/books/status/{ステータス}
個人的には、クエリ文字列または OData のどちらかを好みます。
OData は、特定のテクノロジ (ASP.NET Web API、WCF データ サービス、Microsoft 以外によるものも同等である必要があります) が、そのようなクエリのコードを記述することを回避するのに役立つ場合に特に適しています。
事前にフィルター処理されたコレクションを公開し、そのようなクエリを使用してクライアントからフィルター処理することができます。コレクションを公開するようなシナリオでは、OData クエリを使用しています。