php - 处理参差不齐的(移动)连接和 API

标签 php mysql api http mobile

我目前正在构建一个由移动应用程序通过 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/

相关文章:

php - if 检查双重记录的条件指令

mysql - 加入 Django ORM

php - 清除 XML 的 mysql 数据

java - 改造和 gson 错误 : java. lang.IllegalStateException:应为 BEGIN_OBJECT 但在第 1 行第 1 列路径 $

c 程序作为后台运行进程并且永不死机?

php - 数组作为 Laravel 表单中的输入(提交功能不起作用)

php - 考虑下一个字符的正则表达式

php - php函数中的select语句

ios - Twitter 请求 token 在 iOS 上无效

php - 标准类对象到数组