REST api:在一次获取中请求多个资源[重复]
Posted
技术标签:
【中文标题】REST api:在一次获取中请求多个资源[重复]【英文标题】:REST api: requesting multiple resources in a single get [duplicate] 【发布时间】:2012-03-11 09:18:22 【问题描述】:我正在尝试设计一个 RESTful API,用户可以在其中通过单个 GET 请求获取单个产品或产品列表。每个产品都有一个唯一的 ID。
单品网址很简单:
http://mycompany.com/api/v1/product/id
这将返回单个产品的信息。我对多个产品信息的 URL 应该是什么样子感到困惑。
怎么样
http://mycompany.com/api/v1/product/ids
其中 ids 是逗号分隔的 id 列表?
【问题讨论】:
id 使用类似 http://mycompany.com/api/v1/getproducts?ids=[listofids] 关于 API 设计的问题如何与 Rails 中的实现细节问题重复? /getproducts... 是 RPC 风格,而不是 REST 【参考方案1】:我建议您将其视为列出按 id 过滤的资源的多种表示形式。因此,您向基础资源发出 GET
请求:
https://example.com/api/v1/products
并通过id
过滤响应列表:
https://example.com/api/v1/products?id=1,2,3
【讨论】:
这是最佳答案恕我直言,原因是:/products
和 products?id=1,2,3
将给出一致响应(=收集资源)。比较 /products/1
和 /products/1,2,3
是让客户头疼的秘诀 - 当然,除非所有嵌套端点默认返回集合(这也是一种有趣的方法,例如,请参见 api+json 格式)
我喜欢这种方法,但不应该是example.com/api/v1/products?id=1&id=2&id=3 吗?
@Nitek 没有; there is no guarantee 重复的查询参数将被组合成一个数组。对于您的示例 URL,php 确实会告诉您 id
等于 [1, 2, 3]
,但 Ruby on Rails 会告诉您它等于 3
,并且其他框架的行为也可能不同,例如说id
等于1
。
我希望products?id=
不会返回任何结果,而products
会返回所有结果。
@ma11hew28 因为id
是要匹配的对象上的字段。【参考方案2】:
您对用逗号分隔的 id 的建议已经足够了。
检查一些公共 REST API 以了解它们的处理方式会很有启发性。例如,StackExchange API 用分号分隔 id - https://api.stackexchange.com/docs/answers-by-ids
【讨论】:
我想知道为什么人们不使用产品?id[]=1&id[]=2。 URL 解析器处理得很好。 @JulioGreff 我认为,这是因为它看起来有点难看。没有其他特殊原因。 @JulioGreff RESTful api 不只是按 id 选择,它们还可以装饰。例如/api/dogs/fluffy1234
可以扩展为执行更多类似的操作:/api/dogs/fluffy1234/siblings
等,如果您可以将选择器逻辑保留在 ID 通常所在的位置,那么您仍然可以使用您的装饰器
这是示例,api.stackexchange.com/2.2/answers/…
一系列“GET product”请求的性能也可以更好,因为服务器对聚合查询的响应时间永远不会比查找需要 LONGEST 返回的产品快。另外,您不能将“找不到某些项目”作为响应代码,这通常会导致使用 WebDAV 的 HTTP 207 等肮脏的变通方法以上是关于REST api:在一次获取中请求多个资源[重复]的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 REST API 获取数据时,请求的资源上不存在“Access-Control-Allow-Origin”标头
尝试从 REST API 获取数据时,请求的资源上不存在“Access-Control-Allow-Origin”标头
尝试从 REST API 获取数据时,请求的资源上不存在“Access-Control-Allow-Origin”标头
尝试从 REST API 获取数据时,请求的资源上不存在“Access-Control-Allow-Origin”标头