RESTful 服务和混合数据响应

RESTful services and mixed data response

有服务器和客户端。客户端需要从服务器获取店铺列表和这些店铺的折扣。

我有两种方法:

  1. 一开始我得到所有商店
    e.q。 GET http://myservice.com/shops
    然后我在那些商店得到折扣
    e.q。 GET http://myservice.com/shops/discounts
    (两个请求)
  2. 合二为一(商店和折扣)
    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 中任何需要的地方使用它。