2017-03-09 3 views
0

私のREST APIの形式は:REST URLの適切な形式

http://example.com/api/v1.0/products - get all products 
http://example.com/api/v1.0/products/3 - get product with id=3 

また、製品には、製品グループにorginizedすることができます。

http://example.com/api/v1.0/products/groups 

または

http://example.com/api/v1.0/productgroups 

...

別のオプション:

RESTベストプラクティスに従ってすべての製品グループを取得するための適切な方法は何ですか?

答えて

1

http://example.com/api/v1.0/products/groupsが曖昧につながる可能性があるため、私はRishabh曽爾に同意することはできませんのためにこれをカスタマイズすることができます。

私はお金をhttp://example.com/api/v1.0/productgroupsに、またはそれ以上にはhttp://example.com/api/v1.0/product_groups(読みやすくするため)に置くことにしました。ここ

私が持っていた同様の議論:Updating RESTful resources against aggregate roots only

質問:/製品/機能や/製品の機能のものについては、 は、この上の任意のコンセンサスはありますか? が味の問題ではないことを保証する良い情報源を知っていますか?

回答:これは誤解を招くことです。 可能なすべての機能を得るのではなく、すべての製品にすべての機能 が必要です。しかし、 正直に言うと、この 問題について直接話を任意のソースを見つけるのは難しいですが、人々は/製品/機能のようなネストされたリソースを作成 にしようとしますが、この separatelyをしない記事の束があります。

そこで、我々はhttp://example.com/api/v1.0/products/groupsが可能なすべてのグループまたはすべての既存の製品に接続されているだけで、すべてのグループが返されます(何まだ製品に接続されていないグループについては?)を確認することはできません。

このあいまいさを避けるために、ドキュメントに注釈を追加することができます。しかし、あなたはちょうどhttp://example.com/api/v1.0/product_groupsを準備することができ、すべては明らかです。

+0

一般的なルールはありませんが、これらの2つのMicrosoft Azureの残りのapi urlを見て、op .- までと同じです。https://management.azure.com/subscriptions/$subs/resourceGroups/$resGrp/providers/Microsoft.Compute/virtualMachines/rishabhvm/start?api-version = 2015-05-01 https://management.azure.com/subscriptions/$subs/resourceGroups/$res_grp/providers/Microsoft.Compute/virtualMachines/rishabhvm?api-version=2015 -05-01 また、別のインスタンスでは、後で「製品」エンティティの別のアイテムに関する情報を取得したいと考えています。これによって、彼は同じカテゴリーの異なるアイテムに対して異なるキーワードを構築しなければならなかった。 –

+0

@ RishabhSoniこれは同じケースではありません。 Example from Azureはパターン '/ resources/$ id/sub_resource/$ subresource_id/...'を表示します。 '/ resources/subresources'に関する質問です。 1つのサブリソースに関する情報を取得する: '/ products/$ id/product_group'。別の: '/ products/$ id/price'などです。 'Product_groups'は辞書です。合併症を説明できますか?私は同じことを話しているのかどうかはわかりません。 –

+0

@RishabhSoni 'Product_groups'は辞書です。 '/ products/$ id/product_group'は' product_groups/$ id'へのリンクを持っています。リソース間の関係、それは休息の本質です。 –

1

お客様のクライアント用にRest APIを開発している場合は、IDに頼らざるべきではありません。代わりに意味のある省略形を作成し、サーバー側の実際のIDにマップします。

http://example.com/api/v1.0/products/3の代わりにhttp://example.com/api/v1.0/products?product_id=3を使用し、ドキュメントに「product_id」の説明を付けることができます。基本的にクライアントにproduct_idの使用方法を伝えます。 URLは意味があり、パターンに従っている必要があります。可変部分はurlクエリー(または?またはPOSTペイロードの後の部分)で送信する必要があります。

これで、サーバーを照会する方法も重要です。クライアントがサーバに何かを取得しようとしている場合は、新しい情報をアップロードしている場合は同様のPOST HTTPリクエストを、「更新」リクエストを使用し、新しいリソースを更新または作成している場合は「PUT」リクエストを使用する必要があります。

このようにして、パターン(商品内のグループ)はパターンに従わず、商品グループはパターンなしのキーワードに似ているので、http://example.com/api/v1.0/products/groupsがより適切です。

ディレクトリのようなパターンは、より理解しやすくなります。ファイルシステム(C:\ Program Files \ WinRAR)の場合と同様に、すべての部分がより一般化されたターゲットになります。

また、特定の基 - http://example.com/api/v1.0/products/groups?id=3

+0

あなたの答えをありがとうが、私の質問は主に '/ products/groups'対'/productgroups'パターンとこれをどうやって判断するのかを決めています。 – alexanoid

+0

@alexanoid、編集があなたのクエリを解決するかどうかを確認してください。 –

関連する問題