在RESTful架构中,POST请求既不是安全也不是 Idempotent 。
现在,jQuery的ajax调用允许重试失败的请求,方法是设置ajax调用以使用error
函数来捕获失败,并可选择重试调用(以及{{1}等相关设置}},timeout
,tryCount
和retryAfter
)。
重试GET调用不是问题(因为它们都是安全和幂等),但是如何重新启动POST调用呢?
例如,假设我们使用ajax POST来插入新记录:
迎合这种情况的最佳方式是什么?
答案 0 :(得分:2)
您的代码可以轻松休息的唯一方法(原谅双关语)是确认数据已被接收和接受。
所以答案实际上取决于POST的性质。如果POST确实是更新,例如将名称设置为" John",那么您可以安全地重试几次,直到您得到确认。
但是,你所说的情况是POST在REST意义上真的是一个POST,通常意味着它会添加一个新行。在这种情况下,正确的方法取决于客户端和服务器之间更深层次的握手。
最后,数据完整性是处理数据库的代码的工作,因此服务器代码。因此,如果不应重复行,则方案将按如下方式进行:
服务器接收令牌,验证它,插入帖子,并成功响应
现在,如果服务器不关心重复项并且您无法控制它,并且它只是客户端,那么最好的解决方案就是等待很长时间才能再次尝试,总是替代得到和发布。理论上你不可能知道,因为他们可能有一个队列在服务器离线时收集请求,下周他们会处理它们。