将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”属性

使用 Spring HATEOAS 开发 REST 服务

将 Zuul、Hystrix(和 Feign)与 Spring Cloud HATEOAS 一起使用时如何转发标头?

如何使用 Spring HATEOAS 放置和发布链接