“最佳实践”用于restful POST响应
“最佳实践”用于restful POST响应
所以我这里没有什么新的东西,我只是试图得到一些澄清,但在其他帖子中似乎找不到。
我正在创建一个新的资源 restful,比如:
/books (POST)
带着一个主体:
{ title: 'The Lion, the Witch and the Wardrobe', author: 'C. S. Lewis' }
我知道我应该返回一个 201(已创建)和一个新资源的位置头:
Location: /books/12345
我无法回答自己的问题是服务器应该在主体中返回什么。
我经常做出这种响应:
{ id: 12345, title: 'The Lion, the Witch and the Wardrobe', author: 'C. S. Lewis' }
我出于几个原因这样做:
- 我曾经为 angularjs 等前端框架编写api。在我个人的情况中,我正在使用角资源,并且我经常只需要资源的ID来定位它。如果我没有在响应主体中返回id,那么我需要从位置头中解析出它。
- 在获取所有书籍的 GET 中,我通常返回整个对象而不仅仅是id。在这个意义上,我的客户端代码不必区分从哪里获取id(位置头还是主体)。
现在我知道我实际上处于灰色地带,但大多数人都说返回整个资源是“不好”的做法。但是,如果服务器更改/添加了有关资源的信息,怎么办。它肯定添加了id,但也可能添加其他信息,例如时间戳。在我不返回整个资源的情况下,真的比执行 POST、返回id,然后客户端执行 GET 获取新资源好吗。
admin 更改状态以发布 2023年5月19日
返回新对象符合“统一界面-通过表示形式操作资源”的REST原则。完整的对象是表示创建的对象的新状态的表示形式。
这里有一个非常优秀的API设计参考资料:实用的RESTful API设计最佳实践
它包括了你在这里的问题的答案:更新和创建应该返回资源表示形式
它说:
为了防止API使用者必须再次调用API来获取更新后的表示形式,请让API在响应中返回更新的(或创建的)表示形式。
对我来说似乎非常实用,它符合我上面提到的REST原则。