2012-02-21 13 views
32

ユーザーが単一のGETリクエストで単一の製品または製品のリストを取得できるRESTful APIを設計しようとしています。各製品には固有のIDがあります。REST API:単一のgetで複数のリソースをリクエストする

単一の製品URLは十分に簡単です:

http://mycompany.com/api/v1/product/id 

これは、単一の製品のための情報を返します。私は、複数の製品情報のURLがどのように表示されるべきかについて混乱しています。 IDがIDのカンマ区切りリストです

どの程度

http://mycomapny.com/api/v1/product/ids 

+2

idはhttp://mycompany.com/api/v1/getproducts?id = [listofids] – Dampsquid

+1

などのIDを使用します。APIデザインの重複についての質問Railsの実装の詳細についての質問は? – Tgr

答えて

28

カンマで区切ってIDのあなたの提案は十分です。

パブリックREST APIのいくつかを調べて、その処理方法を確認することは有益です。例の場合、StackExchange APIはIDをセミコロンで区切ります。https://api.stackexchange.com/docs/answers-by-ids

+0

APIの例をありがとう。 – user824212

+1

なぜ人々は製品を使用しないのだろうか?id [] = 1&id [] = 2。 URLパーサはこれをうまく処理します。 –

+5

@JulioGreff私はそれはちょっと醜いと思うからだと思います。他の特別な理由はありません。 –

65

idでフィルタリングされたリソースの複数の表現をリストしているように考えるのがよいでしょう。そのようにあなたは、ベースリソースにGET要求を行います。

https://example.com/api/v1/products

そしてidで応答リストをフィルタリング:

https://example.com/api/v1/products?id=1,2,3

+14

これは優れた答えですimho、理由: '/ products'と' products?id = 1,2,3'は__consistent__応答(=コレクションリソース)を与えます。 '/ products/1'と'/products/1,2,3'を比較することは、クライアント頭痛のレシピです。もちろん、すべてのネストされたエンドポイントがデフォルトでコレクションを返すのでない限り(興味深いアプローチです。 + json](http://jsonapi.org/)形式) – Philzen

+1

私はこのアプローチが好きですが、https://example.com/api/v1/products?id=1&id=2&id=3にするべきではありませんか? – Nitek

+2

@Nitekいいえ。重複したクエリのパラメータが配列に結合されるという[保証はありません](http://stackoverflow.com/q/1746507/578288)。あなたのURLの例では、 'id'は' '[1,2,3]と同じですが、Ruby on Railsは' 3 'と同じだと教えてくれますし、他のフレームワークも異なる動作をするかもしれません。 「id」は「1」と等しいと言う。 –

関連する問題