当前位置: 首页 > 知识库问答 >
问题:

在REST API中使PUT创建请求幂等

幸鸿轩
2023-03-14

之所以区分幂等方法,是因为如果在
客户端能够读取服务器响应之前发生通信故障,则请求可以
自动重复。例如,如果
客户端发送PUT请求,并且底层连接在接收到任何响应之前已关闭
,那么该客户端可以建立新的
连接并重试幂等请求。它知道重复请求将具有相同的预期效果,即使原始
请求成功,尽管响应可能不同。

放置RFC状态:

如果目标资源没有当前表示,并且PUT成功创建了一个表示,则源服务器必须通过发送201(已创建)响应通知
用户代理。如果目标
资源确实具有当前表示形式,并且该表示形式
已根据所包含表示形式的状态成功修改,则源服务器必须发送200(确定)或204(无内容)响应以指示
请求的成功完成。

假设/create将创建的资源存储在DB中,那么它是否应该在第一次创建时返回201,在重试/create时返回200?Retry/Create是否应该在数据库中重新存储相同的资源以符合PUT RFC?

共有1个答案

华峰
2023-03-14

所以这个问题有点糊涂。让我们看看能不能解开它。

PUT /create

abcde

大致说:将/create的状态替换为表示形式abcde。换句话说,消息的语义大致如下

store(key => "/create", value => "abcde")

请注意,两次处理此消息所产生的效果与一次处理消息所产生的效果相同。

store(key => "/create", value => "abcde")
store(key => "/create", value => "abcde")

是的。

Retry/Create是否应该在数据库中重新存储相同的资源以符合PUT RFC?

如果资源已经具有所请求的表示形式,则不需要重新存储它。

 类似资料:
  • 当没有响应返回时,我需要超时我的RESTAPI。例如,当我发出请求时,如果返回响应需要5秒钟以上,则超时。 为了实现这一点,我选择了使用Hystrix的断路器。但我不确定这是否是解决此问题的正确方法,如果一切都好,是否应该对Hystrix进行更多配置? 我当前的实现看起来像, 主类 RestController 应用程序属性 当超时时,它抛出一个HystrixRunTimeException,并由

  • 问题内容: 我试图弄清楚如何使用node.js发出HTTP PUT请求。我尝试了很多不同的方法,但是无法正常工作。 这个想法是要有一种放置文件的方法,例如: 任何帮助,将不胜感激。 问题答案: 以下是发送请求的示例:http : //nodejs.org/docs/v0.4.11/api/http.html#http.request,基本上,您只需将其更改为即可。 您可以使用createReadS

  • 我想提出我的问题的一种方式是:如果我使用put来进行一个非幂等调用,然后使用POST来这样做,会有什么问题呢?

  • 唯一的GET方法一直在工作,但PUT、POST和DELETE总是出错。我尝试通过网络更新处理程序映射。也可以在IIS站点下进行配置。最初,我得到了错误的状态代码405作为方法不允许。当我将处理程序映射更改为 开始将415的错误设置为“不支持的媒体类型”。以下是我收到的回复 {StatusCode: 415, ReasonPhrase:'Unsupport Media Type', Version:

  • 作为服务提供商(SP),我正在尝试使用URL重定向流创建SLO请求。在阅读了很多文章后,这就是我想出的: 创建一个注销请求xml并对其进行数字签名 将请求xml转换为base64 url编码字符串 将base64编码的请求xml作为查询字符串附加到SLO url 将页面重定向到上述构造的url(IDP) 然后IDP将在其结束时为所有SP执行必要的SLO步骤并重定向回我们当前的应用程序(发起SLO请

  • 尝试使用PUT请求更新数据。但是,数据没有更新和返回邮递员中的以前的数据。 邮递员提出要求: 邮递员回复: 我也尝试过使用findByIdAndUpdate。没有得到结果。任何帮助都将不胜感激。 控制器: 路由器: