“最佳实践”用于restful POST响应

14 浏览
0 Comments

“最佳实践”用于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'
}

我出于几个原因这样做:

  1. 我曾经为 angularjs 等前端框架编写api。在我个人的情况中,我正在使用角资源,并且我经常只需要资源的ID来定位它。如果我没有在响应主体中返回id,那么我需要从位置头中解析出它。
  2. 在获取所有书籍的 GET 中,我通常返回整个对象而不仅仅是id。在这个意义上,我的客户端代码不必区分从哪里获取id(位置头还是主体)。

现在我知道我实际上处于灰色地带,但大多数人都说返回整个资源是“不好”的做法。但是,如果服务器更改/添加了有关资源的信息,怎么办。它肯定添加了id,但也可能添加其他信息,例如时间戳。在我不返回整个资源的情况下,真的比执行 POST、返回id,然后客户端执行 GET 获取新资源好吗。

admin 更改状态以发布 2023年5月19日
0
0 Comments

在更新时返回整个对象似乎不太相关,但我几乎想不出为什么在创建对象时返回整个对象会是一种不好的做法,对于常规使用情况通常是有用的,至少可以轻松地获取ID和相关的时间戳。Rails使用脚手架时实际上是默认行为。

我真的没有看到只返回ID并进行GET请求从而获取你最初可以通过POST获取的数据的任何优点。

无论如何,只要API保持一致,我认为你应该选择最符合你需求的模式。在我看来,构建REST API没有任何正确的方法。

0
0 Comments

返回新对象符合“统一界面-通过表示形式操作资源”的REST原则。完整的对象是表示创建的对象的新状态的表示形式。

这里有一个非常优秀的API设计参考资料:实用的RESTful API设计最佳实践

它包括了你在这里的问题的答案:更新和创建应该返回资源表示形式

它说:

为了防止API使用者必须再次调用API来获取更新后的表示形式,请让API在响应中返回更新的(或创建的)表示形式。

对我来说似乎非常实用,它符合我上面提到的REST原则。

0