2012-02-21 148 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