[英]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_size
、 default_page_size
并且您应该在响应中向您的客户端返回一个next_page
字段(如果它是最后一页,则该字段为空)。 您还必须决定要分页的内容,在这种情况下可能是 id。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.