【发布时间】:2015-02-06 11:05:40
【问题描述】:
我试图了解哪种应该是正确的 REST 方法来命名一些电子商务风格的端点。
如果我没记错的话,获取产品列表和每个产品的详细信息最终会得到两个 GET 端点
A) 获取/产品
B) 获取 /products/id
(我故意跳过了分页问题)
如果我正在查看销售特定产品的商店列表,我可以指定和端点
C) 获取 /products/id/shops
我很难理解如果我需要为商店研究指定多个产品会发生什么。
是否可以将上述端点扩展为采用多个参数,或者不鼓励这样做? 换句话说,我应该研究类似的东西
1) 获取 /products/id1,id2,id3/shops
2) 获取 /products/id1/shops [id2,id3]
或者说是全新的
3) 获取 /shops [id1,id2,id3]
?
备注
- Unanswered question in SO 似乎强调这是 RESTful 服务中一个不为人知的故事...... :)
- My current source of reference
-
正如许多 SO 答案中所提到的,例如 here,URI 不会使服务成为 RESTful。
我同意这一点,所以为了扩展这个概念,我上面的观点是,上面的服务的 实现(如 1)可能是(在我的情况下,对于服务器实现细节) ) 不同于以 C) 的形式轻松组合 3 个端点给出的结果。
在更一般的意义上,这种组合的实现可以保留在内部。
因此,是的,URI 不会使服务成为 RESTful,但如果为多个 id 扩展 C) 形式的简洁性和表达性会很好。
编辑 响应 Lutz 在回答中的正确注释,商店可能被视为自己的资源。 如果,我想出了这个不太聪明的例子,子资源本身并不真正存在,例如电影院中两部电影的免费位置
GET /movies/12,14/places
在哪里
GET /places?movies=12,14
显然是可行的,但不是那种 RESTful 恕我直言。
【问题讨论】:
-
获取产品列表的详细信息不一定需要多次请求。
GET /products的响应负载不能包含每个产品的所有详细信息,这与 URI 设计无关。这可能存在性能或其他问题,只有熟悉您正在创建的产品的人才能知道,但这是您团队的设计决策,而不是 REST 的约束。
标签: rest restful-url