6

我想知道是否可以将 HTTP 方法添加到使用 Spring HATEOAS 创建的链接中。我希望链接看起来像:

{
    "href":http://localhost:8080/admin/users",
    "rel": "add",
    "method": "POST"
}

{
    "href":http://localhost:8080/admin/users/john",
    "rel": "remove",
    "method": "DELETE"
}

我找不到任何可以让我在链接中添加“方法”的东西。

4

6 回答 6

4

那是没有意义的。指定某些资源的href地址,并rel说明它与当前资源的关系。HTTP 方法指示客户端想要对其执行的操作,这不是两者之间关系的一部分。

在您的示例中,这种"remove"关系没有意义:HTTP 指定DELETE动词,而语义

DELETE http://localhost:8080/admin/users/john

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

于 2014-08-26T19:35:04.687 回答
1

考虑在您指定的 URI 上实现 HTTP OPTIONS。这将响应该资源的有效选项。这并不经常这样做,但对我来说,OPTIONS 是帮助客户了解允许的内容的完美方式。

优秀的博文在这里:http: //zacstewart.com/2012/04/14/http-options-method.html

于 2014-11-21T13:52:33.363 回答
1

您应该使用关系“编辑”。

在 Atom Pub RFC ( https://www.rfc-editor.org/rfc/rfc5023 ) 的第 (11.1) 节中,您可以将 PUT/DELETE/GET 请求发送到编辑关系的这个 URI。

于 2014-08-27T16:31:07.183 回答
1

Spring HATEOAS 现在似乎支持可供性,它允许您构建提供使用 HAL-FORMS 进行操作的超媒体。这将允许 OP 实现类似于所要求的东西,尽管具有不同的(和更复杂的 [灵活?])模式。

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

于 2020-04-15T21:32:58.157 回答
0

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

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

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

于 2016-03-26T11:02:20.847 回答
-1

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

此外,我认为method参数方法会使您的系统更加混乱且更容易出错。

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

于 2016-03-23T17:12:08.823 回答