首页 > 解决方案 > 应该使用哪种休息方法来创建孩子

问题描述

在我的代码中,实体之间存在父子关系。现在我必须编写 Rest API 来创建一个孩子。

我对 POST 和 PUT 方法感到困惑。如果我要查看 master ,它就像 master 中的更新,所以我必须使用 PUT 方法。如果我要研究孩子,那就像是创造了一个新孩子。

代码:

@PostMapping("/master/{masterId}/child/{childId}")
public ResponseEntity<Void> insertChildDetail(

我正在使用 POST 方法,但我不确定。

您能否让我知道哪种方法更好用以及为什么这样我可以更好地理解。

标签: javaspringresthttp

解决方案


POST和方法都PUT可以用来创建资源。如果您的应用程序代表客户端生成资源标识符,那么您应该使用POST而不是PUT创建资源。

为了支持它,我在PUT下面引用了方法定义的某些部分(突出显示是我的):

4.3.4. 放

PUT方法请求目标资源的状态被创建或替换为请求消息有效负载中包含的表示定义的状态。[...]

如果目标资源没有当前的表示并且PUT成功地创建了一个,那么源服务器必须通过发送一个201(创建的)响应来通知用户代理。如果目标资源确实有当前表示并且该表示已根据封闭表示的状态成功修改,则源服务器必须发送200(OK)或204(No Content)响应以指示请求成功完成. [...]

对请求的正确解释PUT假定用户代理知道需要哪个目标资源。 代表客户端选择适当 URI 的服务,在接收到状态更改请求后,应该使用POST方法而不是PUT. [...]

POST现在,在下面找到有关方法定义的一些相关引用:

4.3.3. 邮政

POST方法请求目标资源根据资源自身的特定语义处理请求中包含的表示。例如,POST用于以下功能(其中包括):

[...]

  • 创建尚未被源服务器识别的新资源;

[...]

如果由于成功处理POST请求而在源服务器上创建了一个或多个资源,则源服务器应该发送一个201(已创建)响应,其中包含一个Location头字段,该字段提供创建的主要资源的标识符和描述引用新资源时请求的状态。

201状态码表示已创建新资源,而标Location头指示新创建的资源所在的位置。如果没有Location提供标头,则客户端应假定资源由有效请求 URI 标识:

6.3.2. 201 已创建

( 201Created) 状态码表示请求已完成,并导致创建一个或多个新资源。请求创建的主要资源由Location响应中的标头字段标识,如果未Location收到任何字段,则由有效请求 URI 标识。[...]


推荐阅读