具有关系的RESTful API

时间:2017-10-05 09:16:41

标签: rest api join relationship many-to-one

让我们假设我正在为餐馆建立一个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

1 个答案:

答案 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_sizedefault_page_size并且您应该在响应中返回您的客户端next_page字段(如果它是最后一页则为null)。您还必须决定要分页的内容,在这种情况下可能是id。

相关问题