2012-02-21 155 views
32

我試圖設計一個RESTful API,用戶可以在單個GET請求中獲取單個產品或產品列表。每個產品都有一個唯一的ID。REST API:在單個請求中請求多個資源

的單品網址很簡單:

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

這將返回一個單一產品的信息。我很困惑多個產品信息的URL應該如何。

如何

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

,其中IDS是逗號分隔的ID列表?

+2

ID使用類似於http://mycompany.com/api/v1/getproducts?id = [listofids] – Dampsquid 2012-02-21 02:20:08

+1

如何解決API設計重複問題有關Rails中實現細節的問題? – Tgr 2013-04-02 10:51:48

回答

28

用逗號分隔的id你的建議是不夠​​好。

檢查一些公共REST API以瞭解它們如何處理將是有益的。例如,StackExchange API使用分號分隔ID - https://api.stackexchange.com/docs/answers-by-ids

+0

感謝您的API示例。 – user824212 2012-02-21 18:02:18

+1

我想知道爲什麼人們不使用產品?id [] = 1&id [] = 2。 URL解析器可以很好地處理這個問題。 – 2012-02-29 20:22:07

+5

@JulioGreff我想,這是因爲它看起來有點難看。沒有其他特別的原因。 – 2014-06-07 09:25:52

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'是客戶頭痛的祕訣 - 當然,除非所有的嵌套端點默認返回集合(這也是一個有趣的方法,例如參見[api + json](http://jsonapi.org/)格式) – Philzen 2014-07-30 14:24:54

+1

我喜歡這種方法,但不應該是https://example.com/api/v1/products?id=1&id=2&id=3? – Nitek 2016-11-14 09:18:42

+2

@Nitek No; [沒有保證](http://stackoverflow.com/q/1746507/578288)重複的查詢參數將被組合成一個數組。對於您的示例URL,PHP確實會告訴您'id'等於'[1,2,3]',但Ruby on Rails會告訴您它等於'3',其他框架的行爲也可能不同。說'id'等於'1'。 – 2016-11-16 16:20:07