问题标签 [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.
objective-c - 以幂等方式返回唯一标识符
我正在创建一个第三方库,我需要找到一种以幂等方式创建唯一标识符的方法。我会尽力解释。
假设你点UIViewController
赞MyViewController
。该库公开了两个不同的 API 来注册/注销组件。
当我执行register
视图控制器时,我需要为控制器创建一个唯一标识符,该标识符在被释放之前应该是有效的。如果我创建此控制器的另一个实例,则标识符应该不同。
换句话说,假设我有
现在在里面a
,我像这样注册自己
此时,我的需求如下:根据我传入的实例创建一个唯一标识符(在我的库中)。
如果a
想注销,它可以简单地做
基于 ( self
) 中传递的实例,我需要(以某种方式)检索先前创建的标识符,以便清除使用该register
方法创建的内容。
如果我创建另一个控制器,比如说b
,标识符应该与使用创建的那个不同a
。
我不会依赖委托模式来要求控制器(在这种情况下)通过[[NSUUID UUID] UUIDString];
或类似的方式提供唯一标识符。
有没有办法根据传入的实例创建唯一标识符?我正在考虑存储内存地址或类似的字符串表示形式,但恕我直言,这是一种黑客行为。
ansible - ansible playbook 中的幂等性
我正在使用 Ansible playbook 配置服务器。我的剧本在第一次执行时工作正常,但是当我再次运行相同的剧本时,它会在服务器上的配置文件中创建重复行。我正在使用lineinfile
模块。每次运行剧本时,以下示例任务都会添加该行。
有没有办法避免这种情况,并保持幂等性。
scripting - SSMS 2012 - 如果不存在,则生成仅数据脚本
我想在 SSMS 2012 中生成一个仅数据插入脚本,其中包含 if not exists 语句以使脚本具有幂等性。
右键单击我希望为其生成脚本的数据库并选择任务 -> 生成脚本,此向导中的高级脚本选项设置如下:
当此向导生成 SQL 时,没有 IF NOT EXISTS 检查:
我是否遗漏了脚本选项中的某些内容,或者这不可能?
web-services - 使方法具有幂等性
假设我们在 AccountManager 类中有一个方法 deposit(Integer amount)。此方法会修改 accountTotal,因此不是幂等的。你如何使这个方法具有幂等性?
rest - HTTP PATCH 是幂等的还是非幂等的?
我读过很多地方说 HTTP Patch 是非幂等的。有人能解释一下为什么它是非幂等的吗?因为根据定义 - 幂等方法可能会也可能不会更改资源状态,但重复请求在第一次请求之后应该没有进一步的副作用。重复的 PATCH 请求如何改变资源状态?
web-services - 幂等 WebAPI
在游戏场景中
当玩家打开一个箱子时,它会收到一个物品。该项目是根据战利品表随机生成的,并且每个项目被丢弃的概率是可配置的。
主要要求是 Web 服务是幂等的,并且战利品表可以在运行时进行配置。
该服务如何实施?
我的方法是将带有每个项目概率的战利品表注入到查询字符串中。玩家 ID 和箱子 ID 也可以用作生成随机物品的种子。
例如:
http://[URL]/api/OpenChest?loottable=Sword:10|Shield:10|HealthPotion:30&playerId=1&chestId=1
这样调用就不会产生任何副作用,并且 Web 服务器可以缓存响应,因为它总是会从特定箱子中为该玩家返回相同的物品。
这个对吗?这个服务是幂等的吗?还有其他方法可以实现吗?
rest - REST API 设计 - PUT 请求的资源关系和幂等性:完整的资源表示究竟是什么意思?
我了解,对于部分更新,必须采取非幂等的操作。为此,一种有效的方法是对该资源发出 POST 请求。
我有一个关于相关资源的问题。例如,想象以下资源及其属性:
Accounts
Id
Name
Account #
用户(一个集合)用户
ID
名称
现在想象一下,我想对帐户进行部分更新 - 例如,更改帐户的名称。
我可以提出以下请求作为有效的部分更新:
我的问题是关于一个完整的 PUT 请求,它必须是幂等的,并且必须包含资源的完整表示。
我可以将以下作为有效的幂等请求吗?
这被认为是一个有效的、幂等的动作吗?我已经包含了所有顶级“帐户”信息,但我质疑它,因为我没有发布所有USERS
属于该帐户的信息。
为了成为有效的幂等请求,我是否需要在 PUT 请求中也包含它的所有子资源?
spring - File端点的uri中的Spring属性和idempotentKey
我正在使用文件端点来监视文件的更改。
- 每当编辑文件时(即上次修改时间更改),我都需要得到通知
- 我应该使用 Spring 属性占位符从属性中指定文件的路径
如果我写,一切正常:
但是,如果我将代码更改为使用 Spring 属性,从而创建一个<endpoint>
,它就不再起作用了。
我想${}
符号和${file:...}
占位符过早扩展存在问题。
我该如何解决这个问题?(我将使用 Spring 属性,而不是 Camel 的。)有什么办法可以逃脱$
?
rest - 尝试创建幂等 Cypher 查询
因此,上周我一直在与 cypher 作斗争,试图获得一个幂等查询,该查询删除所有连接到给定根的节点类型,然后只创建与参数中一样多的节点。问题是删除实际上不会删除任何东西,或者每次我执行查询时节点开始以令人眼花缭乱的速度增加。一次迭代在失败之前设法创建了超过 10000 个重复节点。我正在尝试将其用于 REST API 中的 PUT 请求。我正在使用 Seraph 库在 Node.js 中工作,但我只是使用它提供的基本密码查询。
这是查询的最新迭代:
以下是示例参数:
我已经尝试了更多的变化,而不是我想重新描述的。
web-services - 处理重复 POST 请求引起的副作用
假设我们有一个创建和更新会议室预订的网络服务。更新可以更改预订的各个方面,例如时间和房间号。
假设用户与服务的网络连接可能不可靠(例如移动网络),两个用户 A 和 B 尝试顺序更新同一个预订。
用户 A 发送 POST 请求将会议时间更改为下午 2 点,请求到达服务器,服务器成功处理请求。但是,由于网络连接,返回给用户 A 的响应丢失,用户 A 认为请求失败。
在用户 A 再次尝试之前,用户 B 发送了她将会议时间更改为下午 2:30 的请求,它成功并成功响应了用户 B。
现在用户 A 再次重试(可能是自动)相同的请求,这一次请求和响应都成功,没有问题。换句话说,会议时间改回下午 2 点。
在上面的假设场景中,用户 A 的重复请求导致用户 B 的请求被覆盖,并导致服务器端的状态不正确。
一种可能但幼稚的解决方案是为客户端上的每个请求设置一个 ID,如果只是重新尝试/重新发送请求,则此 ID 不会更改。然后在服务器端,服务器维护接收到的请求 ID 的集合并检查重复项。
解决这个问题的更好的技术或方法是什么?