让我们假设我正在为餐馆建立一个API,我有以下资源:
Donut(has_chocolate,has_sprinkles)
和
Receipt(cost,donut_id)
我的网络应用程序需要显示receipts
表,供管理员查看。不幸的是,receipt
对象本身不够用,管理员需要查看donut
是否有巧克力。
我最好如何做到这一点 - 我可以想到3个实现:
1)进行加入并返回带有receipt
附加字段的has_chocolate
资源
2)执行JOIN并使用包含所有相关receipt
信息的donut
对象返回donut
资源
3)拉入receipt
个对象的页面,收集并删除donut_ids
,并使用它们拉入所需的donut
个对象 - 一次一个{ {1}},或全部/donut/id
答案 0 :(得分:1)
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
字段(如果它是最后一页则为null)。您还必须决定要分页的内容,在这种情况下可能是id。