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

java - 表单提交后如何显示消息并且是幂等的

当提交向数据库中插入记录并且操作成功的表单时,我会进行重定向,然后在 Url 中传递一些参数以显示新插入的记录以及标题消息(即“插入成功”) .

response.sendRedirect(yPage + "?pid=" + ipd + "&feedback=" + form.getFormFeebackSB() );

然后我会在jsp中显示如下: <c:out value="${param.feedback}" />

我使用重定向而不是转发,因为我希望操作是幂等的。当我使用forward成功插入后点击刷新的用户时,通常总是在警告弹出窗口上单击重试,这会导致重复插入。

然后我们的 IT 部门发现我有一个 XSS 漏洞:

page.jsp?feedback=%3Cscript%20type=%22text/javascript%22%3Ealert%28%27xss%27%29;%3C/script%3E

所以我改成这样: <c:out value="${param.feedback}" escapeXml='true'/>

但是现在<br>我的 FeedbackSB 中的任何内容都被转义了,我最终得到了这样的标题消息

Insert was successful<br>An email was sent to Joe<br>Now Complete the XYZ Form;

将消息传递回用户的标准方法是什么,同时保持任何提交幂等并防止 XSS?

编辑:

我搜索了 Flash Scope 并遇到了这个http://blog.smartkey.co.uk/2011/01/implementing-flash-scope-in​​-java -web -applications/ 因为我的应用程序需要做很多工作才能合并框架,该链接中提到的过滤器很容易合并,并且能够轻松实现闪存范围。

0 投票
2 回答
588 浏览

get - 关于GET的幂等性

我一直在阅读 GET HTTP 方法,尤其是它的幂等性。

这是我的理解:如果我调用 GET 操作 1 次或 100 万次(或任意次数),结果应该是相同的。

我对这个定义的问题是这样的。
想象一下,如果我有一个电影数据库,并且我执行了一个 GET 操作,在该操作中我返回了数据库中的所有詹姆斯邦德电影。
想象一下,我运行这个查询一百万次,在第 500,000 次之后,其他人在数据库上运行 POST 查询,添加了一部新的邦德电影。
好吧,现在一半的 GET 操作返回 N 个结果,另一半返回 N+1 个结果。

这不是像通常描述的那样破坏幂等性吗?一个函数的幂等性是不是更好的定义是只要底层数据不变,
无论执行多少次,它都会返回相同的结果?

0 投票
1 回答
146 浏览

rest - 用于更新资源和创建关联对象的 RESTful 方法

我正在为提供临床数据分析的服务设计一个 REST 风格的 API。API 允许用户创建患者资源。此资源为服务器端分析提供输入数据。

创建 Patient 既不安全也不幂等(服务器分配 ID),因此使用 POST, POST Patients

患者资源可能很大,因此它具有可以更新的子资源,例如药物。更新 Medications 是幂等的,因为整个 med 集都将被替换,因此使用 PUT。

临床分析由请求触发 POST /Patients/{patientId}/analysisResults。或者,用户可以请求在 POST /Patients 请求的响应中返回分析结果;这节省了额外的 HTTP 往返。

我的问题是这个;用户希望将分析结果包含在对更新 (PUT) 的响应中Patient/Medications- 这是可以理解的,因为他们不想再次请求检索结果。因此PUT Patient/Medications,对于 Patient 资源而言将是幂等的,但对于所有资源而言不是幂等的,因为将创建新的 analysisResults 子资源。我是不是该:

  • a) 使用 PUT 启用此功能。
  • b) 使用 POST 启用此功能。
  • c) 坚持需要单独调用来创建新的 analysisResults,即使这会增加最终用户的整体响应时间?
0 投票
1 回答
103 浏览

python - Python,当 type(a) 还是 A 时如何处理 A(a)

我需要创建一个模仿这种行为的类(在数学中,我们说listdict是“幂等的”):

所以,如果A是我的班级,我想写

我想我的 A 类必须看起来像这样:

我试试

这没用 !

我不想在self中复制x属性,我只想让self成为x或“点” x

一些想法?谢谢

0 投票
6 回答
17595 浏览

http - POST 不是幂等的后果(RESTful API)

我想知道我目前的方法是否有意义,或者是否有更好的方法来做到这一点。

我有多种情况要创建新对象并让服务器为这些对象分配一个 ID。发送 POST 请求似乎是最合适的方式。然而,由于 POST 不是幂等的,请求可能会丢失,再次发送它可能会创建第二个对象。此外,由于 API 经常通过移动网络访问,因此丢失请求可能很常见。

结果,我决定将整个过程分为两步:

  1. 首先发送一个 POST 请求以创建一个新对象,该对象在 Location 标头中返回新对象的 URI。

  2. 其次,对提供的位置执行幂等 PUT 请求,以用数据填充新对象。如果新对象在 24 小时内未填充,服务器可能会通过某种批处理作业将其删除。

这听起来合理还是有更好的方法?

0 投票
1 回答
135 浏览

google-app-engine - 涉及购买独特商品的应用引擎交易的最佳实践?

没关系:问题出在客户端,显然 google chrome 在缓存 get 请求的结果方面比我预期的更激进。使用 firefox 进行测试会产生预期的结果。我将投票赞成删除这个问题。

我有 2 个模型,用户和项目。用户有一个“credits”属性,表示用户有多少钱。项目有一个“所有者”属性,如果它不拥有,则为“无”,如果拥有,则为用户的 id。我正在尝试将以下步骤放入事务中:

  1. 通过 id 获取用户(不是祖先查询)
  2. 通过 id 获取项目(不是祖先查询)
  3. 如果该项目已被拥有,则中止。
  4. 如果用户没有足够的积分,则中止。
  5. 通过项目的价格减少用户的信用。
  6. 将项目的“所有者”属性设置为用户的 ID。

如果一切顺利,我会向客户表明他们的购买已经完成,在 @ndb.transactional 装饰函数之外。

为了测试,我快速敲击这个功能(模拟快速按下购买按钮)。作为回应,我得到了几个迹象表明我的购买已经完成,但我预计只有一个这样的迹象。我的期望是第一个事务会通过,其他事务会在第 3 步失败。如果他们在第 3 步没有失败,那么我假设它们是一起开始的,但只有一个事务会在第 3 步结束时通过测试检查更新时间并抛出异常的事务。我的两个假设似乎都是错误的。

值得注意的是,我的交易“有效”,因为我不会超支信用。我只是多次告诉客户他们进行了相同的购买,因为我没有例外。

此外,第三步的中止确实会在短暂延迟后开始触发,但还不足以捕获最初的垃圾邮件。

我的误解是什么?

0 投票
1 回答
227 浏览

ios - 如何查看用户是否购买了消耗品?

首先,谢谢大家。

前提条件:我在申请中提供消耗品产品:

  1. 项目清单
  2. 用户通过 iap 购买商品。
  3. 在我的应用程序收到更新的Trancactions (Transaction) 之前,网络已断开连接。

所以我的服务器没有数据来验证收据。用户也无法获得“虚拟货币”。

谁能告诉我如何解决这个问题,或者给我一些提示。非常感谢。

0 投票
1 回答
155 浏览

rest - REST 中 PUT 操作的幂等性要求的范围是什么?

假设我有一个像这样序列化为 JSON 的对象:

现在,假设我有一个http://absoluteTruth.foo/ {id} (PUT) URI 来编辑这个对象。如果我使用包含以下内容的消息正文调用它:

面对(不可能)试图改变其他两个值的请求时,幂等性的要求是什么?一方面,我可以看到上面的 PUT 请求应该产生一个这样序列化的对象:

这样,无论其他人做什么,我的 PUT 操作总是产生相同的输出。不幸的是,这对最终用户提出了要求,即他们执行 GET、更改接收到的数据并发回。(Rich Hickey 可能会告诫您完成各个字段的更新。)另一方面,我可以看到它可能会导致:

因为我们可以说“状态”和“外观”的值的变化不属于 PUT 的副作用,当它被调用时只指定了“名称”参数。但是,从后续调用http://absolutetruth.foo/ {id} (PUT) 中返回的内容可能会不时发生变化,例如,如果其他人停下来对 Michael nee' Mike 的长相评分更高。

虽然我怀疑这不是一个惊天动地的问题,但我读过的各种 RFC,包括 2616,都不清楚这一点。我倾向于认为使用 {"Name" : "Michael"} 的 PUT 足够幂等,如果它不理会所有其他值,而不是压平它们。任何人都有权威来源的明确答案?

0 投票
1 回答
757 浏览

python - 有没有更优化的方法来解决这个幂等方程(模n环)?

这是 Project Euler 的问题之一:

如果我们为 0 <= a <= 5 计算 a^2 mod 6,我们得到:0、1、4、3、4、1。

“a”的最大值使得 a^2 mod 6 = a 为 4。让我们称 M(n) 为 a < n 的最大值,使得 a^2 mod n = a。所以 M(6) = 4。

对于 1 <=n <=10^7 求 M(n)。

到目前为止,这就是我所拥有的:

我已经在较小的情况下尝试了此代码,并且效果很好;但是,做 10^7 个案例太慢了。

目前,对于 n 小于 20000,它的运行时间约为 8 秒。当 n 小于 90000 时,它运行大约 150 秒。

据我所知,对于 n 小于 10^7,它会运行数小时甚至数天。

我已经在使用筛子生成素数,以便这部分尽可能快,我能做些什么来加快其余代码的速度吗?

我已经尝试过使用不同的编译器,例如 psyco、pypy 和 shedskin。Psyco 提供了最小的增加,shedskin 将其加速了大约 7 倍,但在出现大量数据时会产生错误,pypy 的速度最快(大约是速度的 20-30 倍)。但即便如此,对于必须处理的案件数量来说,它仍然不够快。

编辑:

我添加了

这会预先生成所有的正方形,a这样我就不必一遍又一遍地生成相同的正方形。程序变得稍快但仍然不够

0 投票
1 回答
951 浏览

python - PyList_GetItem 不是幂等的

我正在尝试 Swig 并分别具有以下 C 代码和接口:

它编译正确,我可以很好地导入扩展模块。事实上,当我将变量 a 定义为 [{1:1},{2:2}] 并第一次执行 example.test(a, 0) 时,它会正确返回 {1,1}。当我将 a 输入 Python shell 时,我得到 [{1:1},{2:2}] 的预期。当我再次尝试 example.test(a,0) 时,出现分段错误。任何想法为什么会发生这种情况?