2013-01-15 7 views
6

MVCパターンとRESTサービスでは、/items/{id}のようなURIを使用するのが一般的ですが、 URI? GET /items?id={id}REST URL命名規則/ items/{id} vs/items?id = {id}

GET /items/{id}さらに、企業はいくつかの関連(たとえば親)エンティティを指す「referenceId」フィールドを持っており、私はどのようにして、親エンティティのすべてのアイテムを取得するには、RESTサービスを作成する必要があると言うことができます優れている:

GET(POST) /items/parent/{parentId} 

または

GET(POST) /items?parent={parentId} 

は私の主観が解決するのに役立つだろう洞察力に感謝のだろうRESTサービスのURLを構築することに訴えています。

+0

複雑なREST URLに関する良いアドバイスはこちら[http: //blog.apigee.com/detail/simplify_associations_sweep_complexities_under_the_http) – thecoshman

答えて

5

私は以下のスキームを使用します。

/items/id 

この一意ID idとアイテムのリソースに対処します。このリソースを一意的に扱うためのパラメータとしてパラメータを使用しているわけではありません(他のオプションと同様)。ちょうど miguelcobainが示唆しているとおり。ここでid

/parent/id/items 

は一意に親のリソースに対処するためのIDであり、我々は/収集したものから、それが参照項目を取得します。あなたが質問で言ったことから、親はコンテナやコレクションのような複数のアイテムを参照しているようです。

私がこれに使用する慣習は、スコープを左から右に絞り込むことです。したがって、項目がactiveまたはinactiveになる可能性があります。したがって、アイテムの属性または属性はactiveまたはinactiveになります。あなたの最初の質問について

/items/active 
/parent/id/active 
+0

私はアイテムがリソースだと思う、それはその一意のIDを持っており、親pareamterなしで照会することができます。別のコレクション(テーブル)に格納されます。そして、親は実際にはあまりにもリソースです。だから私は親によって項目を "フィルタリング"する必要があります。このケースでは、/ items/parent/{parentId}または/ parents/{parentId}/itemsの方が適切な場合はどうなりますか? – WHITECOLOR

+0

'/ parents/{parentId}/items'は左から右に絞り込みます。 Parentscollection => single parent =>親のattributecollection – Xeago

2

もちろん、RESTの原則はURLの審美的な詳細については気にしません。それは、すべてのリソースが一意にアドレス可能でなければならないことを強制するだけです。

さらに、クエリパラメータを使用して、「種類」を一意に指定すると、「パラメータ」のセマンティクスに違反しますか?パラメータは何かオプションでなければならず、何かを追加してパラメータ化する必要があります。たとえば、アイテムのコレクションに関する詳細な検索のようなものです。

あなたが書いた内容は、場合によっては意味をなさないことがあります。場合によります。

あなたの例では、は本当にリソースです?そうでない場合は、GET(POST) /parents/{parentId}を実行してください。

parentがブール値で、親が等しいアイテムを検索する場合は、パラメータを使用すると意味があります。しかし、特定のIDを持つ親を明示していると明示しているので、私は親がリソースそのものであると仮定し、オプション1を使用してリソースを一意的に指定します。

私は自分自身を明確にしたいと思います。

+0

私はアイテムがリソースだと思います。別のコレクション(テーブル)に格納されます。そして、親は実際にはあまりにもリソースです。あなたは/ items/parent/{parentId}や/ parents/{parentId}/itemsという方が適切だと思いますか? – WHITECOLOR

+0

間違いなく '/ parents/{parentId}/items'です。そのような種類のURLは常に発生します。 – miguelcobain

+0

はい、ありがとう、私はトピックを習得しました。 – WHITECOLOR

3

:この上絞り込む私は、次のスキームを取得し、それが存在しない場合は

/items/{id}は、指定されたIDまたは404を持つ単一のリソースを取得する必要があります。

は、コレクションを照会しているため、(配列内の配列が1つのみであっても)配列を取得する必要があります。あなたの2番目の質問については

私は、@ miguelcobainの評価に同意 - の項目は、特定のリソース/エンティティであれば、それを取得するために、適切なリソースのパスを使用します。

コンシューマでこれを簡単にするには、rel="parent"link headerを作成します。または、子リソースにuriを含めます。リンクヘッダーの例については、GitHubのpagination apiを参照してください。

+0

私はitemがリソースであり、その固有のIDを持ち、親のpareamterなしで照会できると思います。別のコレクション(テーブル)に格納されます。そして、親は実際にはあまりにもリソースです。あなたは/ items/parent/{parentId}や/ parents/{parentId}/itemsという方が適切だと思いますか? – WHITECOLOR

+0

/parents/{parentId}/items – codeprogression

0

私には従うべき規則がないようです。

items/{id} - この慣習は、与えられたidによってGET項目に適しています。ユーザーがIDを指定しないと、404ステータスコードが返されます。

items/id={id}&name={name} - このタイプの規則は、複数のアイテムを所定の基準で検索するのに適しています。項目が見つからない場合はであり、でない場合は、「検索条件に一致するものは見つかりませんでした。」