我目前正在构建一个由移动应用程序通过 HTTP 访问的 API。假设以下场景:移动应用向 www.example.com/customers 发送包含注册数据的 HTTP POST 请求,API 连接到数据库,插入新记录并返回 200 OK 以及一些用户特定的注册数据。
现在假设数据库中的插入正常,但 200 OK 响应从未到达移动应用程序、连接不良/用户关闭移动连接等。显然重复相同的 POST 请求是行不通的,因为具有该用户名/ID 的用户已经存在。我将如何解决这个问题(并使用相同的机制保护 API 中的其他功能)?
此外,当我在考虑上述情况时,网络服务器和数据库服务器之间是否也会出现同样的问题?例如:PHP 脚本调用 mysql_connect() 连接到(远程)数据库并调用 mysql_query()。数据库服务器是否提交了查询,但由于某种原因,PHP 脚本由于连接不良或类似情况而从未从数据库连接接收到“OK”?
最佳答案
您可能会为每个请求使用一个事务 ID 来验证实际请求是否已完成。
让我详细说明;对于移动应用程序发出的每个请求,您都会为发出的请求分配一个事务 ID。服务器执行操作,将交易保存为已完成并返回一条消息,例如:{"result": 200, "transaction": 1234123}。
如果客户端没有收到成功消息(由于网络问题),它会用相同的事务id重新发送请求。当服务端收到消息后,就知道交易已经完成,并相应地响应给客户端。
您可能应该使用 UUID 作为交易 ID 以确保唯一性。
关于php - 处理参差不齐的(移动)连接和 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218595/