将HTTP方法添加到Spring HATEOAS链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将HTTP方法添加到Spring HATEOAS链接相关的知识,希望对你有一定的参考价值。
我想知道是否可以将HTTP方法添加到使用Spring HATEOAS创建的链接。我希望链接看起来像:
{
"href":http://localhost:8080/admin/users",
"rel": "add",
"method": "POST"
}
{
"href":http://localhost:8080/admin/users/john",
"rel": "remove",
"method": "DELETE"
}
我找不到任何允许我在链接中添加“方法”的内容。
这没有意义。 href
指定某些资源的地址,rel
说明它与当前资源的关系。 HTTP方法指示客户端想要对它做什么,这不是两者之间关系的一部分。
在您的示例中,"remove"
关系没有意义:HTTP指定DELETE
动词,以及语义
DELETE http://localhost:8080/admin/users/john
已经知道了。类似地,POST
创建一个新资源,因此指定/admin/users
足以让客户端列出用户(使用GET
)或添加新用户(使用POST
)。
您应该使用关系“编辑”。
在Atom Pub RFC(http://tools.ietf.org/html/rfc5023)的(11.1)部分中,它定义了您可以将PUT / DELETE / GET请求发送到编辑关系的此URI。
考虑在您指定的URI上实现HTTP OPTIONS。这将响应该资源的有效选项。它并不常用,但对我而言,OPTIONS是帮助客户了解所允许内容的完美方式。
优秀的博客文章:http://zacstewart.com/2012/04/14/http-options-method.html
单独的链接关系应该能够指示客户端如何使用链接,所以我认为在链接中使用method
参数将是多余的。链接关系的定义应该包含可接受的HTTP方法的详细信息。
此外,我认为method
参数方法会使您的系统更容易混淆,更容易出错。
假设您有一个链接关系do-something
,最初设计为仅允许POST。然后do-something
的创建者希望改变该特性并仅切换到PUT。在链接中使用method
参数会使您容易受到“真实来源”(链接关系定义)与提供链接的服务器之间的不一致。
我基于Richardson模型设计了REST API; http://martinfowler.com/articles/richardsonMaturityModel.html
所有端点都使用HTTP方法返回“允许”链接。这种设计方法允许消费者知道要使用的HTTP方法,而不是计算要使用的方法。这很有用,因为有些操作使用POST或PUT。 POST用于创建资源或更改资源的状态。 PUT用于更新现有资源并删除以删除资源。
在链接中包含HTTP方法是一种强大的机制,使API的使用者能够知道如何调用API。
以上是关于将HTTP方法添加到Spring HATEOAS链接的主要内容,如果未能解决你的问题,请参考以下文章
Angularjs + Spring Boot REST (HATEOAS) - 将角度变量传递给角度方法
强制spring hateoas生成https链接而不是http
如何删除 Spring HATEOAS 中的“_embedded”属性