【发布时间】:2017-12-10 05:08:41
【问题描述】:
我正在考虑使用 HATEOAS 定义一个 REST API。特别是,我发现为给定资源指示当前可用操作的概念非常有趣。
某些 HATEOAS 规范包含太多开销,无法满足我的需求,因此我查看了 HAL specification,因为我发现它非常简洁实用:
{
_links: {
self: { href: "/orders/523" },
warehouse: { href: "/warehouse/56" },
invoice: { href: "/invoices/873" }
},
currency: "USD",
status: "shipped",
total: 10.20
}
但是,HAL 中的链接仅包含相关资源的列表,而不包含对它们的可用操作。按照上面的例子,我现在可以取消订单,还是不能取消?一些 HAL 示例通过使用特定 URL 进行取消来解决此问题,并且仅当可以取消时才在响应中添加相应链接:
"cancel": { "href": "/orders/523/cancel" }
但这不是很 RESTful。取消不是资源。取消是对资源的删除,即:
DELETE /orders/523
有没有一种用 HAL 表示这一点的好方法,还是我应该使用不同的 HATEOAS 规范?
我正在考虑返回一个与 self 具有相同 URL 的“取消”链接,但在这种情况下,客户必须知道要取消他们必须使用 DELETE 动词,这在 HATEOAS 响应中并未真正描述.
self: { "href": "/orders/523" },
cancel: { "href": "/orders/523" }
这会是 HATEOAS / HAL 推荐的方法吗?我知道 HAL 没有任何“方法”参数,我自己添加它会违反 HAL 规范。
【问题讨论】: