处理斑点(移动)连接和API

时间:2012-02-09 20:53:01

标签: 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脚本从未从数据库连接收到“确定”?

2 个答案:

答案 0 :(得分:1)

您可以使用每个请求的事务ID来验证实际请求是否已完成。

让我详细说明;对于移动应用程序发出的每个请求,您都会根据请求分配一个事务ID。服务器执行操作,将事务保存为已完成,并返回消息,如:{“result”:200,“transaction”:1234123}。

如果客户端未收到成功消息(由于网络问题),它将使用相同的事务ID重新传输请求。当服务器收到消息时,它将知道事务已经完成并相应地响应客户端。

您应该使用UUID作为事务ID以确保唯一性。

答案 1 :(得分:0)

存储可用于识别进程是否已完成的会话变量,或使用类似ajax调用的方式重复尝试加载仅在事务被正确记录后才会呈现的结果页面。

就脚本和数据库之间的通信而言,无论浏览器的连接状态如何,代码都将继续执行,因此您的代码将始终从MySQL获得响应并按预期完成执行。