web-services - 如何避免向 Web 服务发送 2 个重复的 POST 请求

标签 web-services networking post duplicates data-consistency

我发送一个 POST 请求来创建一个对象。该对象已在服务器上成功创建,但我无法接收响应(丢弃在某处),因此我尝试再次(一次又一次)发送 POST 请求。结果是服务器端有很多重复的对象。

处理该问题的官方方法是什么?我认为这是一个非常普遍的问题,但我不知道它的确切名称,所以无法谷歌它。谢谢。

最佳答案

在 REST 术语中,这就是 POST 的接口(interface)方式。用于创建对象(PUT 用于修改,DELETE 用于删除,GET 用于检索)被调用,POST操作被认为是不安全的和非幂等的,因为其他类型的请求的第二个操作对对象的收集没有影响。

我怀疑是否有一种“官方”的方式来处理这个问题,但可能有一些设计模式可以处理它。例如,这两种替代方案可能会在某些情况下解决此问题:

  • 对象具有唯一性约束。例如,存储唯一用户名的记录不能重复,因为数据库会拒绝它。
  • 在每个客户端发出 POST 之前向它发出一次性使用 token 请求,通常在客户端加载带有输入表单的页面时。第一个POST创建一个对象并将 token 标记为已使用。第二个POST将看到 token 已被使用,您可以回答“是的,是的,好的,好的!”错误或成功消息。

  • 有用链接where you can read more about REST .

    关于web-services - 如何避免向 Web 服务发送 2 个重复的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19769459/

    相关文章:

    php - 上传到 s3 时,curl_exec 因错误 500 而终止

    jquery - Internet Explorer 10 不发送 Ajax Post 数据

    http - 为什么我在尝试 http 发布时得到 CURLE_URL_MALFORMAT?

    Perl 网络服务(服务器)最佳实践

    Solaris 上的网络帮助

    web-services - Tomcat 中的服务在 Servicemix 中不起作用

    sockets - 服务器不发送 SYN+ACK

    python - 如何保持Python服务器连接打开,直到客户端完成它?

    web-services - BOM 不在 CF 中,但由 IIS/SharePoint 发送

    ios - 如何从网络服务获取数据?