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