将HTTP方法添加到Spring HATEOAS链接

时间:2014-08-26 19:30:33

标签: java spring 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"
}

我找不到任何允许我在链接中添加“方法”的内容。

6 个答案:

答案 0 :(得分:2)

这没有意义。 href指定某个资源的地址,rel说明它与当前资源的关系。 HTTP方法指示客户端想要对它做什么,这不是两者之间关系的一部分。

在您的示例中,"remove"关系没有意义:HTTP指定DELETE动词,以及

的语义
DELETE http://localhost:8080/admin/users/john

已经知道了。同样,POST会创建一个新资源,因此指定/admin/users足以让客户列出用户(使用GET)或添加新用户(使用POST)。

答案 1 :(得分:1)

您应该使用关系"编辑"。

在Atom Pub RFC(http://tools.ietf.org/html/rfc5023)的(11.1)部分中,它定义了您可以将PUT / DELETE / GET请求发送到编辑关系的此URI。

答案 2 :(得分:0)

考虑在您指定的URI上实施HTTP OPTIONS。这将响应该资源的有效选项。它并不常用,但对我而言OPTIONS是帮助客户理解所允许内容的完美方式。

优秀博客文章:http://zacstewart.com/2012/04/14/http-options-method.html

答案 3 :(得分:0)

单独的链接关系应该能够指示客户端如何使用链接,所以我认为在链接中使用method参数将是多余的。链接关系的定义应该包含可接受的HTTP方法的详细信息。

另外,我认为method参数方法会让您的系统更容易混淆,更容易出错。

我们假设您有一个链接关系do-something,最初设计为仅允许POST。然后do-something的创建者希望改变该特征并仅切换到PUT。在链接中使用method参数会使您容易受到“真实来源”之间的不一致的影响。 (链接关系定义)和提供链接的服务器。

答案 4 :(得分:0)

我设计了基于Richardson模型的REST API; http://martinfowler.com/articles/richardsonMaturityModel.html

所有端点都返回"允许"链接与HTTP方法。这种设计方法允许消费者知道要使用的HTTP方法,而不是计算要使用的方法。这很有用,因为有些操作使用POST或PUT。 POST用于创建资源或更改资源的状态。 PUT用于更新现有资源,删除以删除资源。

在链接中包含HTTP方法是一种强大的机制,使API的使用者能够知道如何调用API。

答案 5 :(得分:0)

Spring HATEOAS现在似乎支持收费,这使您可以构建使用HAL-FORMS进行操作的超媒体。这将使OP可以实现与请求的功能类似的功能,尽管使用的是不同的(和更复杂的[flexible?]模式)。

https://github.com/spring-projects/spring-hateoas-examples/tree/master/affordances