基于REST的API:我应该在响应主体发送URI部分? 又有怎样的更新呢? [关闭](REST

2019-10-20 20:27发布

我建立一个RESTful API和我不知道它是否是一个问题(违反REST),以发送相同信息URI在响应部分body或没有。

现在的情况

一个GET /element/$ID电话让你这个元素的数据从数据库中,其中还包含element_ID ,并与该最后一部分URI 。 现在,客户端使用element_ID从身体,但改变他们就没有问题, 如果它不应该是这样的RESTful API

一般问题

它是发送一个问题URI部分的响应主体?
(如果是的话应这些部件是可改变的)
如果该数据从响应体取出,以便客户端必须使用URI来提取所需的信息? 主要的问题(除因冗余的不必要的开销),我看到的是,当客户想改变相关建筑领域的URI (如使用PUT/element/$ID和改变element_id场)。

例子

这会是一个问题(该element_id也用于URI ):

{
    "name": "Robert",
    "element_id": 1337
    "links": [ {
        "rel": "self",
        "href": "http://domain.tld:8080/element/1337"
    } ]
}

而会发生什么,如果你让下面的调用这个模型

PUT http://domain.tld:8080/element/1337
{
    "name": "Robert",
    "element_id": 1234
}

还是应该模型只是看起来更像吗?

{
    "name": "Robert",
    "links": [ {
        "rel": "self",
        "href": "http://domain.tld:8080/element/1337"
    } ]
}

Answer 1:

要遵循HATEOAS限制,客户端应该使用URI的由服务器提供给“dinamically导航休息接口”。

所以,如果你提供这个“element_id”,你不违反HATEOAS限制,但如果它使用来构建自己的URI来代替使用由服务器提供的客户端将违反它

为了不给这样的机会给客户这将是更好的考虑到标识的“内部”,不包括它在文档中。 但在某些情况下,你可以使用相关的元素信息(即“用户名”)来构建URI,你必须包含。

最重要的一点是,客户不应该试图构建的URI,访问API。

它的好处是允许重组或REST接口的放大,而不需要修改客户端,比如明天,你可以想族元素的项目(说什么),并希望您的href改变

“ HTTP://domain.tld:8080 /项目/ 01 /元/ 1337 ”

如果你的客户跟着HATEOAS它需要没有变化。



Answer 2:

您可以使用URI模板

  • 如果你希望用户填写一些参数输入字段。
  • 如果你想使你的反应较小,但毕竟是用gzip容易得多

您应遵循的原则HATEOAS:如果你改变了URI结构的客户应该不会打破。 所以大致客户不应该建立的URI,或者如果它建立的URI,然后总是服务器对食谱如何做到这一点,所以如果食谱的变化,客户端就可以适应。 这是非常相似的浏览器是如何工作的,他们遵循了HTTP服务器提供的链接...



Answer 3:

我不知道我理解你的问题完全。 然而,包括URI的对象在你的回应是REST的约束称为HATEOAS。 看看这里: http://spring.io/understanding/HATEOAS

响应格式不REST的关注。



文章来源: RESTful API: Should I send URI parts in the response body? And how about Updating them? [closed]