如何在REST式POST返回生成的ID?(How to return generated ID in

2019-09-01 06:06发布

比方说,我们有一个服务来添加一个新的酒店:

> POST /hotel
> <hotel>
>   <a>aaa</a>
>   <b>aaa</b>
>   <c>aaa.......this is 300K</c>
> </hotel>

然后我们有一个得到:

> GET /hotel

< HTTP/1.1 200 OK
< <hotel>
<   <a>aaa</a>
<   <b>aaa</b>
>   <c>aaa.......this is 300K</c>
< </hotel>

问题是,我们怎么返回初始POST创造? 我们想为“参考”,以新的资源返回的ID(在服务器上生成的),但我们不希望返回所有的酒店数据在我们的情况下,数据字段中的一个是平面文件〜300K 。

所以,你应该刚刚返回:

< HTTP/1.1 200 OK
< <hotel>
<   <id>123</id>
< </hotel>

还是应该返回完整的对象:

< HTTP/1.1 200 OK
< <hotel>
<   <id>123</id>
<   <a>aaa</a>
<   <b>aaa</b>
>   <c>aaa.......this is 300K</c>
< </hotel>

??

我感兴趣的是宁静的最佳实践。

注:本次关联交的会谈更多地了解重返而是计较的少如何返回。

Answer 1:

返回状态码201 - 创建,并把网址中的Location头。 你并不需要在所有返回的身体。



Answer 2:

REST是所有关于URL的资源。

最好的REST风格的做法是返回用于访问刚刚创建的资源的URL。

我不会返回整个文档。 除非是在协议出于某种原因(如服务器可能会改变客户端提交和客户端希望确认,这是确定的数据)非常重要的。 如果不是重要的,客户已经知道的数据。

如果仅返回ID,客户端将不知道该怎么办。 但返回一个网址将允许客户(可能通过获取的服务描述文件),继续与服务器的交互REST。 这并不是说你不能与URL一起返回的ID。 但是,URL,因为它是一个网络系统,是的,你可以知道信息的最重要的一条。 此外,ID很可能是你内部需要为您的后端,不是客户端应该永远不必担心什么。

编辑:
至于是否应该在包装XML返回的URL,这真的取决于你的协议。 如果你认为你可能要在未来返回其他数据,XML将更加谨慎。 有一个命名的文件格式,将让你的版本你的服务好(通过改变文档类型头)。 但是你可以只返回URL。



Answer 3:

返回的响应中的位置头实际实体主体中的所述一个优点在于,客户端可以接收在一个单一的往返到服务器所得到的表示。 AtomPub的做到这一点,例如。



文章来源: How to return generated ID in RESTful POST?
标签: rest