当前位置: 首页 > 面试题库 >

宁静的POST响应的“最佳实践”

余弘毅
2023-03-14
问题内容

因此,这里没有什么新鲜事,我只是想澄清一下,似乎无法在其他帖子中找到任何内容。

我正在重新创建新资源,说:

/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'
}

我这样做有两个原因:

  1. 我已经为诸如angularjs的前端框架编写了api。在我的特定情况下,我使用的是角度资源,我通常只需要ID即可找到资源。如果我没有在响应主体中返回ID,则需要从Location标头中解析出该ID。
  2. 在所有书籍的GET中,我通常返回整个对象而不仅仅是id。从这种意义上说,我的客户代码不必区分从何处获取ID(位置标头或主体)。

现在,我知道我确实处于灰色地带,但是大多数人都说退还全部资源是“不好的”做法。但是,如果服务器将信息更改/添加到资源中,该怎么办。它肯定会添加ID,但也可能添加其他内容,例如时间戳。如果我不返回全部资源,那么执行POST,返回ID,然后让客户端执行GET获取新资源真的更好吗?


问题答案:

在更新中返回整个对象似乎不太相关,但是我几乎看不到为什么在创建普通对象时返回一个完整对象是不好的做法。至少对于轻松获得ID并在相关时获得时间戳很有用。实际上,这是使用Rails脚手架时的默认行为。

我真的没有看到仅返回ID并在之后执行GET请求以获取初始POST可能获得的数据的任何优势。

无论如何,只要您的API保持一致,我认为您应该选择最适合自己需求的模式。没有任何正确的方式来构建REST API,即imo。



 类似资料:
  • 我试图遵循API的最佳实践,但我得到了相互矛盾的建议。大多数人建议对URI使用脊柱病例(例如stackoverflow和RFC3986。我有一个API,允许通过各种参数过滤GET请求: < code >获取/终结点?my-parameter=true 但是,我也在 GET 响应和 PATCH 请求中使用相同的参数。在那里,我看到更多的骆驼大小写或snake_case,脊柱大小写是一个额外的语言,不

  • 我正在spring boot中编写RESTAPI-s。我想确保我的代码对于使用swagger API开发工具(swagger)的前端开发人员是可读的。例如 如果请求成功,响应是一个分支对象,如果失败,响应是只有一个属性(消息)的FindError对象。因此,这两种方法的执行取决于响应。但是swagger UI没有显示响应应该如何显示,因为我使用了“?”作为泛型类型。这是捕捉错误的最佳实践吗?(这种

  • 我想回复ResponseEntity的回复。我对在ResponseEntity中提到返回类型的最佳实践有点困惑。 这是我的控制器: 我的主要责任: 这里我的返回类型是GenericResponse、AdminAccount。在ResponseEntity中提及所有退货类型是否是一种良好的做法? 哪个是最好的方法

  • 我的应用程序与一些外部服务集成,并向该服务请求数据。我只是想知道在客户端建模响应的最佳实践是什么,尤其是在客户端业务逻辑只需要一些数据的情况下。我正在考虑以下实施: 将JSON转换为包含所有数据/属性的类对象,并在我的代码中使用此类对象 将JSON转换为仅包含进一步处理所需的数据/属性的类对象 以上两者的组合(创建包含所有属性的类对象,然后将其转换为仅包含进一步业务逻辑所需属性的对象)

  • 问题内容: 在Java中,何时应使用静态非最终变量? 例如 显然,这里我们不是在谈论常量。 根据我的经验,我经常在使用单例时对它们进行辩护,但后来我最终需要拥有多个实例,这使我感到非常头痛和重构。 似乎很少在实践中使用它们。你怎么看? 问题答案: 统计信息收集可以使用非最终变量,例如,计算创建的实例数。另一方面,对于这种情况,您可能还是要使用etc,这时可能是最终的。另外,如果您要收集多个统计信息

  • 我想从spring控制器返回一个字符串(json字符串)作为它接收到的AJAX调用的响应,响应可能会根据我是否提交了@Valid表单而有所不同。这就是我处理它的方式,我想知道这是否被认为是最佳实践?请注意,我使用的是@RestController,所以@ResonseBody应用所有方法。