【问题标题】:RESTful services and mixed data responseRESTful 服务和混合数据响应
【发布时间】:2015-04-09 14:13:13
【问题描述】:
有服务器和客户端。客户端需要从服务器获取店铺列表和店铺折扣。
我有两种方法:
- 起初我得到所有商店
等式GET http://myservice.com/shops
然后我在那些商店获得折扣
等式GET http://myservice.com/shops/discounts
(两个请求)
- 一站式(商店和折扣)
e.q. GET http://myservice.com/shops_and_discounts
(一个请求)
第二个决定是否与 RESTful 服务的原则相矛盾?
还是用第一种方式比较好?
谢谢。
【问题讨论】:
标签:
web-services
rest
url
url-routing
restful-url
【解决方案1】:
REST 强调组件之间的统一接口,当它促使您针对您的问题实施更通用的解决方案时,这是它的优势之一。这两种方法本质上都没有错,但是您正在创建一个乍一看并不明显并且需要明确文档的特殊情况。
我用来解决这个问题的解决方案是我称之为缩放协议的东西。理想情况下,选项 1 应该就足够了,如果客户必须提出两个请求,那就这样吧。但是,您甚至可能将其他资源嵌套得更深,并且任何一种解决方案(多个请求或显式聚合资源)都无法很好地扩展。
这个想法是有一个zoom 数字参数,其中包括父表示中的相关子资源,根据需要用于多个级别。例如,/shops 返回所有商店。 /shops?zoom=1 返回包含所有折扣和任何其他直系子资源的所有商店。 /shops?zoom=2 会做同样的事情并将zoom=1 应用于子资源本身,嵌入折扣的直接子资源,等等。
这种方法的优点是您可以使其成为标准,并且客户可以在需要时在您的 API 中使用它。