问题标签 [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 回答
106 浏览

http - 如何根据 URL、Headers 和 Body 使幂等 POST 可缓存?

考虑一个公开/search端点的 Web 服务。该端点上的任何操作都适合 GET 方法,因为它是幂等的。然而,搜索参数的复杂性可能导致客户端、代理甚至服务器可能无法正确处理的极长 URL(尽管 RFC 未指定硬限制)。

因此,唯一的选择是使用 POST 并在请求正文中传递搜索条件。如果不是因为响应现在不可缓存的事实,这没什么大不了的:不可能根据它的 URL、一些标头(接受)和完整的来定义它的可缓存性正文(实际搜索条件所在的位置)。

我是否认为 HTTP/1.1 在这方面缺乏并且没有优雅而简单的解决方案来解决这个问题?

谢谢

0 投票
3 回答
1138 浏览

http - 如何使用服务器计算字段创建 RESTful 对象

我有一个对象:

Id是一个不可变的键,Name是一个可变的字符串,并且CurrentBalance是根据与该帐户关联的所有交易计算得出的。

我坚持GET \Accounts\{Id}不会是幂等的事实,因为对事务的更改会导致CurrentBalance. 我是否应该从对象中删除此字段并发出类似的请求

但现在我必须多次调用服务器来获取CurrentBalance所有对象:

我想我只是想看看是否已经有一种标准的方法来处理我缺少的这个问题?

更新

第 2 部分,如果原始对象可以通过 GET。我更新的唯一方法Account.Name是通过补丁,因为我不能允许更新 CurrentBalance,对吗?

笔记

我意识到我可以把它放在客户端上以获取所有交易并计算它,但出于多种原因我更愿意在服务器上执行此操作

0 投票
4 回答
31584 浏览

java - 幂等方法是什么意思,调用java.lang.AutoCloseable的close方法有什么副作用?

java.lang.AutoCloseable 的 close() 方法的 Java 文档说

请注意,与Closeableclose()的方法不同,此方法不需要是幂等的。换句话说,多次调用此 close 方法可能会产生一些可见的副作用, 这与多次调用必须没有效果不同。但是,强烈建议此接口的实现者使他们的 close 方法具有幂等性。close()Closeable#close()


幂等方法 是什么意思,close()两次调用此方法的副作用是什么?

既然接口Closeable扩展AutoCloseable了,为什么在接口关闭时看不到副作用Closeable

0 投票
3 回答
2484 浏览

rest - 如何以幂等方式重命名资源?

我实现了一个重命名公司的 API,如下所示:

将返回指向公司新 URI:HTTP 301的标头。Location/companies/B

我怎样才能使这个操作在有和没有If-Match标题的情况下是幂等的?

  1. 没有If-Match标头:如果用户尝试重命名不存在的公司,我希望服务器返回HTTP 404,但我不能这样做,因为合法的重命名操作不会是幂等的(它们会301第一次返回,并且404在随后的调用中)。这是有问题的,因为我希望客户能够区分失败的重命名(公司不存在)和已经发生的重命名。

  2. 带头If-Match:如果公司的ETag依赖于公司名称,那么后续的重命名操作将失败,因为前提条件不再成立。同样,这使得操作看起来失败,而实际上它已经发生了。

0 投票
3 回答
5446 浏览

php - Installing PHP Pear packages via Ansible with idempotency

I'm currently installing Pear packages for PHP with Ansible like so:

The ignore_errors is required because pear always reports an error when running a command that's been run/completed successfully before (like:

Is there a better (more idempotent) way to run pear commands, and not have to scroll through a bunch of big, red ignored errors?

0 投票
1 回答
549 浏览

domain-driven-design - 如何处理 CQRS 中的摘要/报告?

我正在做一个酒店预订项目。一项新功能要求客户可以对酒店发表评论。每条评论都有一个等级(0 --> 5)。在搜索酒店页面上,每家酒店都会显示其平均评分。

添加评论非常简单,可以发布一个 CommentAddedEvent:

在查询方面,此事件上会保留一个注释行:

但是我们在如何显示酒店的平均评分方面放慢了速度。以下是我们可能的解决方案:

a) 数据库集成

在搜索酒店查询端,使用 sql 函数获取平均值:

这看起来很简单,但我们认为它会在测试中引入更多的精力,并且可能会导致一些性能问题。

b) EventHandler 计算平均值

添加一个订阅 CommentAddedEvent 的事件处理程序并计算平均值:

测试很简单,但这个解决方案似乎不是幂等的。当某些事情失败时,事件处理程序可能会处理重复事件。

c) 计划任务

添加定时任务,汇总每家酒店的意见。但这对于一些酒店来说效率很低,因为上次任务后没有评论。

d) 计划任务与事件处理程序混合

使用事件处理程序来标记自上次任务以来评论的酒店:

并根据计数大于零的酒店安排摘要任务。

解决方案 D 是幂等的,并且似乎更有效。我们是否存在一些缺陷或任何其他解决方案?

0 投票
1 回答
710 浏览

filter - AngularDart自定义过滤器调用()方法需要幂等吗?

Angular Dart 教程的主要运行示例是一个食谱书应用程序第 5 章末尾关于过滤器和服务的练习建议尝试“创建一个 [自定义] 过滤器,它将食谱中 [列出的每种成分] 的所有数量相乘”,从而允许“用户翻倍、三倍或把食谱翻两番。” 例如,“1/2 杯面粉”的成分在翻倍时会变成“1 杯面粉”。

我编写了这样一个自定义过滤器:它需要一个Ingredients 列表(由 aquantity和 a组成description)并返回一个新的 new Ingredients 列表(数量增加),但我收到以下错误:

我的问题是:AngularDart 自定义过滤call()方法的要求和/或允许的行为是什么?例如,显然允许从其输入列表中删除(即过滤)元素,但它也可以添加新元素或替换元素吗?Dart angular.core NgFilter文档只是说“过滤器是一个带有调用方法的类”。我还没有找到更多细节。

从这个 AngularJS 帖子的答案推断,似乎重复调用call()应该(最终?)产生“相同的结果”。如果是这样,这将是一个合理的约束。

产生“相同的结果”可能意味着call()需要是幂等的,但在 Dart 的情况下,这种幂等性应该是相对于==(对象等价)而不是identical()(对象身份),恕我直言。我使用以下小示例进行了一些测试来说明问题:

  • 主要.dart
  • index.html 摘录

如果我改变class A身体

这使得所有实例都A被考虑==过,那么 call()main.dart 中的第二个实现(带有 的那个add(new A()))仍然会给出一个错误(尽管是一个不同的)。

我可以看到如何在不使用自定义过滤器的情况下解决教程练习,但我试图不放弃寻找可以按要求工作的过滤器的挑战。我是 Angular 的新手,并决定加入 AngularDart,因此在解释 的各种风格的效果call()或查找 , 的预期行为的文档方面有任何帮助call()(或者让我知道您是否认为这样的自定义过滤器根本无法被写!)将不胜感激。

0 投票
1 回答
1346 浏览

sql - Non idempotent SQL command with OrientDB JDBC Driver

Hello, I'm facing an issue while using the JDBC driver to connect to a Plocal Orient DB. Here is my code:

And here the exception stack;

Exception in thread "main" com.orientechnologies.orient.core.exception.OCommandExecutionException: Cannot execute non idempotent command at com.orientechnologies.orient.core.storage.OStorageEmbedded.executeCommand(OStorageEmbedded.java:90) at com.orientechnologies.orient.core.storage.OStorageEmbedded.command(OStorageEmbedded.java:85) at com.orientechnologies.orient.core.sql.query.OSQLQuery.run(OSQLQuery.java:69) at com.orientechnologies.orient.core.sql.query.OSQLSynchQuery.run(OSQLSynchQuery.java:82) at com.orientechnologies.orient.core.query.OQueryAbstract.execute(OQueryAbstract.java:29) at com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.query(ODatabaseRecordAbstract.java:505) at com.orientechnologies.orient.core.db.ODatabaseRecordWrapperAbstract.query(ODatabaseRecordWrapperAbstract.java:188) at com.orientechnologies.orient.jdbc.OrientJdbcPreparedStatement.executeQuery(OrientJdbcPreparedStatement.java:73) at org.octopus.dao.jeudonnees.impl.JdbcJeuDonneesDAO.create(JdbcJeuDonneesDAO.java:39) at org.octopus.dao.jeudonnees.impl.JdbcJeuDonneesDAO.create(JdbcJeuDonneesDAO.java:1) at org.octopus.tests.tests.main(tests.java:23)

It seems like it's not possible to run non idempotent commands using the Orient JDBC Driver. Thanks for your help

0 投票
2 回答
412 浏览

azure - 用于非事务集成任务的多个 Azure 工作角色实例

我们有一个即将到来的项目,我们需要通过各种传输方式与第 3 方集成以从他们那里获取数据。

WCF Endpoints & Web API Rest Endpoints 之类的东西很好。

然而,在 2 个场景中,我们需要从 pop3 帐户中提取包含 xml 的自动生成的电子邮件,或者从外部 SFTP 帐户中提取 xml 文件。

我现在将开始对这些进行原型设计,但我想知道在多实例工作者角色环境中是否有关于如何处理这些非事务性系统的标准实践、模式或指南。IE

如果 2 个工作人员同时连接到 pop 帐户或同时连接到同一个 FTP,会发生什么情况。

如果 1 个工作人员从 FTP 删除文件,而另一个工作人员正在下载,会发生什么情况。

控制重复应该不是问题,因为我们会将应用程序端的所有内容记录到数据库中,并且所有内容都应该是唯一可识别的,因此我们将能够添加 if-not-exists-create-else-skip 逻辑工人,但我只是想知道我还应该考虑其他什么来使其更具弹性/幂等性。

0 投票
2 回答
1611 浏览

ruby - 关于幂等性和函数的基本 Sidekiq 问题

我正在使用 Sidekiq 在后台执行一些繁重的处理。我在网上查了一下,但找不到以下问题的答案。我在用:

然后,在课堂上,我有一个

两个问题:

  1. 如何使这个函数对 UserMailer sendmail 是幂等的?换句话说,如果延迟方法运行两次,我如何确保它只发送一次邮件?将它包装在这样的工作中吗?

    mail_sent = false if !mail_sent UserMailer.send_mail(listing) mail_sent = true end

我猜不是因为再次尝试该功能,然后 mail_sent 设置为 false 以进行第二次运行。那么如何使 UserMailer 只运行一次。

  1. 在延迟异步方法中调用的函数也是异步的吗?换句话说, Class.call_example_function() 是否异步执行(不是响应/请求周期的一部分?)如果不是,我应该使用 Class.delay.call_example_function()

总的来说,只是熟悉 Sidekiq,所以任何想法都会受到赞赏。

谢谢