RESTful API 有关系
RESTful API with relationships
假设我正在为一家餐馆建造 API,并且我有以下资源:
Donut(has_chocolate,has_sprinkles)
和
Receipt(cost,donut_id)
我的 Web 应用程序将要显示 table 的 receipts
供经理查看。不幸的是 receipt
对象本身并没有足够的用处,经理需要查看 donut
是否有巧克力。
如何最好地做到这一点 - 我可以想到 3 种实现方式:
1) 使用 has_chocolate
附加字段
执行 JOIN 和 return receipt
资源
2) 使用包含所有相关 donut
信息的 donut
对象执行 JOIN 和 return receipt
资源
3) 拉入一页 receipt
个对象,收集 donut_ids
并删除重复项,然后使用它们拉入所需的 donut
个对象 - 一个时间 /donut/id
,或一次 /donuts?ids=id1,id2,id3
A RESTful API 应具有解析为资源或资源集合的端点。然后您可以在该端点上执行 HTTP 动词,在本例中为 GET。因此,您需要决定如何为 API 用户定义资源?
是否有两种资源,甜甜圈和收据,就像您的 SQL 一样?
您要将甜甜圈定义为将收据作为字段之一的资源吗?
两者都可以,问题是当您开始制作作为资源的路线时 'with something extra on top'。这开始变得难以让消费者理解而不是 RESTful。
如果是我,我会选择选项3。
- 为甜甜圈和收据的集合定义两个单独的端点:
/v0/donuts/
和 /v0/receipts/
- 允许消费者通过公开必要的过滤器在客户端加入
/v0/donuts/?ids=1,2,3,8
您可以创建一条 /v0/events/< id>/
路线,但考虑到用例是始终获得一批甜甜圈,这将导致消费者往返次数过多。
听起来你也想对这些集合进行分页。在这种情况下,您应该定义一个 max_page_size
、default_page_size
并且您应该 return 您的客户在响应中有一个 next_page
字段(如果它是最后一页,则该字段为空)。您还必须决定要分页的内容,在这种情况下可能是 id。
假设我正在为一家餐馆建造 API,并且我有以下资源:
Donut(has_chocolate,has_sprinkles)
和
Receipt(cost,donut_id)
我的 Web 应用程序将要显示 table 的 receipts
供经理查看。不幸的是 receipt
对象本身并没有足够的用处,经理需要查看 donut
是否有巧克力。
如何最好地做到这一点 - 我可以想到 3 种实现方式:
1) 使用 has_chocolate
附加字段
receipt
资源
2) 使用包含所有相关 donut
信息的 donut
对象执行 JOIN 和 return receipt
资源
3) 拉入一页 receipt
个对象,收集 donut_ids
并删除重复项,然后使用它们拉入所需的 donut
个对象 - 一个时间 /donut/id
,或一次 /donuts?ids=id1,id2,id3
A RESTful API 应具有解析为资源或资源集合的端点。然后您可以在该端点上执行 HTTP 动词,在本例中为 GET。因此,您需要决定如何为 API 用户定义资源?
是否有两种资源,甜甜圈和收据,就像您的 SQL 一样? 您要将甜甜圈定义为将收据作为字段之一的资源吗?
两者都可以,问题是当您开始制作作为资源的路线时 'with something extra on top'。这开始变得难以让消费者理解而不是 RESTful。
如果是我,我会选择选项3。
- 为甜甜圈和收据的集合定义两个单独的端点:
/v0/donuts/
和/v0/receipts/
- 允许消费者通过公开必要的过滤器在客户端加入
/v0/donuts/?ids=1,2,3,8
您可以创建一条 /v0/events/< id>/
路线,但考虑到用例是始终获得一批甜甜圈,这将导致消费者往返次数过多。
听起来你也想对这些集合进行分页。在这种情况下,您应该定义一个 max_page_size
、default_page_size
并且您应该 return 您的客户在响应中有一个 next_page
字段(如果它是最后一页,则该字段为空)。您还必须决定要分页的内容,在这种情况下可能是 id。