繁体   English   中英

具有关系的 RESTful API

[英]RESTful API with relationships

假设我正在为一家餐厅构建 API,并且我有以下资源:

Donut(has_chocolate,has_sprinkles)

Receipt(cost,donut_id)

我的 Web 应用程序将要显示receipts表供经理查看。 不幸的是, receipt对象本身不够用,经理需要查看donut是否有巧克力。

我如何最好地做到这一点 - 我可以想到 3 个实现:

1)做一个JOIN并返回带有has_chocolate附加字段的receipt资源

2) 执行 JOIN 并返回带有包含所有相关donut信息的donut对象的receipt资源

3) 拉入一页receipt对象,收集并删除重复的donut_ids ,并使用它们拉入所需的donut对象 - 一次一个/donut/id ,或一次全部/donuts?ids=id1,id2,id3

RESTful API 应该具有解析为资源或资源集合的端点。 然后,您可以在该端点上执行 HTTP 动词,在本例中为 GET。 因此,您需要决定如何为 API 用户定义资源?

是否有两种资源,甜甜圈和收据,就像在您的 SQL 中一样? 您是否要将甜甜圈定义为将收据作为字段之一的资源?

要么都很好,问题是当你开始制作作为资源的路线时,“上面有一些额外的东西”。 对于消费者来说,这开始变得难以理解,而不是 RESTful。

如果是我,我会选择选项3。

  • 为甜甜圈和收据的集合定义两个单独的端点: /v0/donuts//v0/receipts/
  • 通过暴露必要的过滤器/v0/donuts/?ids=1,2,3,8允许消费者加入客户端

您可以创建一个/v0/events/< id>/路由,但如果用例是始终获得一批甜甜圈,那么这将导致消费者往返次数过多。

听起来您还想对这些集合进行分页。 在这种情况下,您应该定义一个max_page_sizedefault_page_size并且您应该在响应中向您的客户端返回一个next_page字段(如果它是最后一页,则该字段为空)。 您还必须决定要分页的内容,在这种情况下可能是 id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM