所以这里没什么新内容我只是想弄清楚一些其他帖子似乎找不到任何内容。
我正在创造一个新的资源,并说:
/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'
}
我这样做有几个原因:
现在我知道我真的在这里的灰色区域,但是大多数人都说回归整个资源是'糟糕'的做法。但是,如果服务器更改/添加信息到资源,该怎么办?它肯定会添加id,但也可能添加其他内容,如时间戳。在我没有返回整个资源的情况下,最好是进行POST,返回id,然后让客户端执行GET以获取新资源。
答案 0 :(得分:169)
返回新对象符合“统一接口 - 通过表示操作资源”的REST原则。完整对象是已创建对象的新状态的表示。
API设计有一个非常好的参考,在这里:Best Practices for Designing a Pragmatic RESTful API
它包含您的问题的答案:Updates & creation should return a resource representation
它说:
防止API使用者再次访问API 更新表示,让API返回更新(或创建) 代表作为回应的一部分。
对我来说似乎非常实用,它符合我上面提到的REST原则。
答案 1 :(得分:104)
在更新上返回整个对象似乎不太相关,但我很难理解为什么在创建它时返回整个对象在正常用例中是不好的做法。这至少可以很方便地获取ID并在相关时获取时间戳。 这实际上是使用Rails搭建脚手架时的默认行为。
我真的看不到任何优势,只返回ID并执行GET请求,以获取初始POST时可能获得的数据。
无论如何,只要您的API一致,我认为您应该选择最适合您需求的模式。没有任何正确的方法来构建REST API,imo。