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