问题标签 [idempotent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
501 浏览

objective-c - 以幂等方式返回唯一标识符

我正在创建一个第三方库,我需要找到一种以幂等方式创建唯一标识符的方法。我会尽力解释。

假设你点UIViewControllerMyViewController。该库公开了两个不同的 API 来注册/注销组件。

当我执行register视图控制器时,我需要为控制器创建一个唯一标识符,该标识符在被释放之前应该是有效的。如果我创建此控制器的另一个实例,则标识符应该不同。

换句话说,假设我有

现在在里面a,我像这样注册自己

此时,我的需求如下:根据我传入的实例创建一个唯一标识符(在我的库中)

如果a想注销,它可以简单地做

基于 ( self) 中传递的实例,我需要(以某种方式)检索先前创建的标识符,以便清除使用该register方法创建的内容。

如果我创建另一个控制器,比如说b,标识符应该与使用创建的那个不同a

我不会依赖委托模式来要求控制器(在这种情况下)通过[[NSUUID UUID] UUIDString];或类似的方式提供唯一标识符。

有没有办法根据传入的实例创建唯一标识符?我正在考虑存储内存地址或类似的字符串表示形式,但恕我直言,这是一种黑客行为。

0 投票
1 回答
4474 浏览

ansible - ansible playbook 中的幂等性

我正在使用 Ansible playbook 配置服务器。我的剧本在第一次执行时工作正常,但是当我再次运行相同的剧本时,它会在服务器上的配置文件中创建重复行。我正在使用lineinfile模块。每次运行剧本时,以下示例任务都会添加该行。

有没有办法避免这种情况,并保持幂等性。

0 投票
0 回答
593 浏览

scripting - SSMS 2012 - 如果不存在,则生成仅数据脚本

我想在 SSMS 2012 中生成一个仅数据插入脚本,其中包含 if not exists 语句以使脚本具有幂等性。

右键单击我希望为其生成脚本的数据库并选择任务 -> 生成脚本,此向导中的高级脚本选项设置如下:

设置高级选项

当此向导生成 SQL 时,没有 IF NOT EXISTS 检查:

我是否遗漏了脚本选项中的某些内容,或者这不可能?

0 投票
2 回答
163 浏览

web-services - 使方法具有幂等性

假设我们在 AccountManager 类中有一个方法 deposit(Integer amount)。此方法会修改 accountTotal,因此不是幂等的。你如何使这个方法具有幂等性?

0 投票
4 回答
2681 浏览

rest - HTTP PATCH 是幂等的还是非幂等的?

我读过很多地方说 HTTP Patch 是非幂等的。有人能解释一下为什么它是非幂等的吗?因为根据定义 - 幂等方法可能会也可能不会更改资源状态,但重复请求在第一次请求之后应该没有进一步的副作用。重复的 PATCH 请求如何改变资源状态?

0 投票
0 回答
59 浏览

web-services - 幂等 WebAPI

在游戏场景中

当玩家打开一个箱子时,它会收到一个物品。该项目是根据战利品表随机生成的,并且每个项目被丢弃的概率是可配置的。

主要要求是 Web 服务是幂等的,并且战利品表可以在运行时进行配置。

该服务如何实施?

我的方法是将带有每个项目概率的战利品表注入到查询字符串中。玩家 ID 和箱子 ID 也可以用作生成随机物品的种子。

例如:

http://[URL]/api/OpenChest?loottable=Sword:10|Shield:10|HealthPotion:30&playerId=1&chestId=1

这样调用就不会产生任何副作用,并且 Web 服务器可以缓存响应,因为它总是会从特定箱子中为该玩家返回相同的物品。

这个对吗?这个服务是幂等的吗?还有其他方法可以实现吗?

0 投票
2 回答
610 浏览

rest - REST API 设计 - PUT 请求的资源关系和幂等性:完整的资源表示究竟是什么意思?

我了解,对于部分更新,必须采取非幂等的操作。为此,一种有效的方法是对该资源发出 POST 请求。

我有一个关于相关资源的问题。例如,想象以下资源及其属性:

  1. Accounts
    Id
    Name
    Account #
    用户(一个集合)

  2. 用户
    ID
    名称

现在想象一下,我想对帐户进行部分更新 - 例如,更改帐户的名称。

我可以提出以下请求作为有效的部分更新:

我的问题是关于一个完整的 PUT 请求,它必须是幂等的,并且必须包含资源的完整表示

我可以将以下作为有效的幂等请求吗?

这被认为是一个有效的、幂等的动作吗?我已经包含了所有顶级“帐户”信息,但我质疑它,因为我没有发布所有USERS属于该帐户的信息。

为了成为有效的幂等请求,我是否需要在 PUT 请求中也包含它的所有子资源?

0 投票
1 回答
1336 浏览

spring - File端点的uri中的Spring属性和idempotentKey

我正在使用文件端点来监视文件的更改。

  1. 每当编辑文件时(即上次修改时间更改),我都需要得到通知
  2. 我应该使用 Spring 属性占位符从属性中指定文件的路径

如果我写,一切正常:

但是,如果我将代码更改为使用 Spring 属性,从而创建一个<endpoint>,它就不再起作用了。

我想${}符号和${file:...}占位符过早扩展存在问题。

我该如何解决这个问题?(我将使用 Spring 属性,而不是 Camel 的。)有什么办法可以逃脱$

0 投票
1 回答
211 浏览

rest - 尝试创建幂等 Cypher 查询

因此,上周我一直在与 cypher 作斗争,试图获得一个幂等查询,该查询删除所有连接到给定根的节点类型,然后只创建与参数中一样多的节点。问题是删除实际上不会删除任何东西,或者每次我执行查询时节点开始以令人眼花缭乱的速度增加。一次迭代在失败之前设法创建了超过 10000 个重复节点。我正在尝试将其用于 REST API 中的 PUT 请求。我正在使用 Seraph 库在 Node.js 中工作,但我只是使用它提供的基本密码查询。

这是查询的最新迭代:

以下是示例参数:

我已经尝试了更多的变化,而不是我想重新描述的。

0 投票
1 回答
652 浏览

web-services - 处理重复 POST 请求引起的副作用

假设我们有一个创建和更新会议室预订的网络服务。更新可以更改预订的各个方面,例如时间和房间号。

假设用户与服务的网络连接可能不可靠(例如移动网络),两个用户 A 和 B 尝试顺序更新同一个预订。

用户 A 发送 POST 请求将会议时间更改为下午 2 点,请求到达服务器,服务器成功处理请求。但是,由于网络连接,返回给用户 A 的响应丢失,用户 A 认为请求失败。

在用户 A 再次尝试之前,用户 B 发送了她将会议时间更改为下午 2:30 的请求,它成功并成功响应了用户 B。

现在用户 A 再次重试(可能是自动)相同的请求,这一次请求和响应都成功,没有问题。换句话说,会议时间改回下午 2 点。

在上面的假设场景中,用户 A 的重复请求导致用户 B 的请求被覆盖,并导致服务器端的状态不正确。

一种可能但幼稚的解决方案是为客户端上的每个请求设置一个 ID,如果只是重新尝试/重新发送请求,则此 ID 不会更改。然后在服务器端,服务器维护接收到的请求 ID 的集合并检查重复项。

解决这个问题的更好的技术或方法是什么?