因此,这里没有什么新内容,我只是想澄清一下,似乎在其他帖子中找不到任何内容。
我正在重新创建新资源,说:
/books (POST)
与身体:
{
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
我知道我应该返回带有新资源的Location标头的201(创建的):
Location: /books/12345
我似乎无法为自己回答的问题是服务器应该返回什么内容。
我经常这样做:
{
id: 12345,
title: 'The Lion, the Witch and the Wardrobe',
author: 'C. S. Lewis'
}
我这样做有两个原因:
- 我已经为诸如angularjs的前端框架编写了api。在我的特定情况下,我使用的是角度资源,并且我通常只需要ID即可找到资源。如果我没有在响应正文中返回ID,则需要从Location标头中解析出该ID。
- 在所有书籍的GET中,我通常返回整个对象而不仅仅是id。从这个意义上说,我的客户代码不必区分从何处获取ID(位置标头或主体)。
现在我知道我真的在这里处于灰色地带,但是大多数人都说退还全部资源是“不好的”做法。但是如果服务器将信息更改/添加到资源中该怎么办。它肯定会添加ID,但也可能添加其他内容,例如时间戳。如果我不返回整个资源,那么执行POST,返回ID,然后让客户端执行GET获取新资源真的更好吗?
我个人更喜欢空的POST响应。RESTful Location标头值不应该是URI(唯一资源标识符)吗?因此,也许您应该将其用作ID,而不是对其进行解析以找出服务器内部ID。IMO,RESTful API使用者应该使用提供的超链接导航而不是构建路径,猜测特定服务器在何处定位资源...毕竟,客户端是否不知道它刚刚创建的资源的状态?重复此操作会浪费网络资源。
—
ch4mp
对于“创建/插入”,状态201-已创建,标题位置→ localhost:8080 / employees / 1 (请参阅:此处)
—
Hassan Tareq