因此,RESTful API 的一般模式是返回一个带有嵌入式链接的对象,您可以使用它来检索相关对象。但有时为了方便起见,您想一次拉回整个对象图块。
例如,假设您有一个包含客户、订单和退货的商店应用程序。您想同时显示客户 ID 12345 的个人信息、所有订单和所有退货。(可能有充分的理由不总是退回订单和退货以及客户个人信息。)
执行此操作的纯 RESTful 方式类似于:
GET /
- 返回链接模板列表,包括一个用于查询客户的模板
GET /customers/12345
(基于来自的链接模板/
)- 返回客户个人信息
- 返回链接以获取该客户的订单和退货
GET /orders?customerId=12345
(来自/customers/12345
回复)- 获取客户 12345 的订单
GET /returns?customerId=12345
(来自/customers/12345
回复)- 获取客户 12345 的退货
customers
但是,一旦您有了URI,就能够在一个查询中将所有这些都拉回来,那就太好了。这种便捷查询是否有最佳实践,您想在其中嵌入部分或全部链接而不是发出多个请求?我在想类似的事情:
GET /customers/12345?include=orders,returns
但如果人们有办法做到这一点,我宁愿不只是编造一些东西。
(FWIW,我不是在开一家商店,所以我们不要争论这些是否是模型的正确对象,或者你将如何深入研究实际产品,等等。)
更新添加:看起来在HAL中这些被称为“嵌入式资源”,但在显示的示例中,似乎没有任何方法可以选择要嵌入的资源。我发现一篇博客文章提出了类似于我上面描述的内容,embed
用作查询参数:
GET /ticket/12?embed=customer.name,assigned_user
这是一种标准或半标准的做法,还是只是某个博主编造的?