4

次の URI を指定します。

/myapp/books/status/{status}

例えば ​​:

/myapp/books/status/new 

これにより、このステータスのフラグが付けられたすべての書籍が返されます。

特定のステータスのフラグが付いていないすべての本を返すための適切な URI は?

/myapp/books/notstatus/new

特定のステータスの本を除いて、すべての本のコレクションを返したい..

ご意見をお聞かせください...

4

2 に答える 2

5

書籍リスト リソースのステータスをフィルタリングするには、クエリ パラメータを使用することをお勧めします。

myapp/books/?status=new
myapp/books/?status=not_new

どちらのクエリも同じリソース (書籍のリスト) を返します。そのリストで必要なタイプを除外しているだけなので、クエリ パラメータの使用は理にかなっています。ステータスの前に付けられた を使用not_して逆クエリを実行しますが、任意の規則を使用できます。

REST では、get パラメーターを避ける必要はありません (get パラメーターはブードゥー教だと考える人もいるようです)。

私がこの方法を気に入っている理由は、状態が新品で状態が良いものなど、複数の情報を含むすべての本にチェックを追加したい場合に、後で選択肢が広がるからです。

    myapp/books/?status=new&condition=good

それをクエリ パラメータではなく URL セグメントに分割しようとすると、すぐに面倒になってしまいます。

于 2012-11-05T16:39:06.707 に答える
2

私が知っているように、いくつかの方法があり、それらはすべて正しいです (REST の観点から):

  • クエリ文字列パラメーター

myapp/books?status=new

myapp/books?$filter=status eq 'new'

  • URIでもいい

myapp/books/status/{ステータス}

個人的には、クエリ文字列または OData のどちらかを好みます。

OData は、特定のテクノロジ (ASP.NET Web API、WCF データ サービス、Microsoft 以外によるものも同等である必要があります) が、そのようなクエリのコードを記述することを回避するのに役立つ場合に特に適しています。

事前にフィルター処理されたコレクションを公開し、そのようなクエリを使用してクライアントからフィルター処理することができます。コレクションを公開するようなシナリオでは、OData クエリを使用しています。

于 2012-11-05T17:08:36.513 に答える