如何处理临时无法访问的在线API

时间:2016-10-24 16:03:29

标签: api synchronization offline offline-caching

这是一个更普遍的问题,因此请考虑我对以下问题的抽象。

我目前正在开发一个应用程序,它通过公共API与远程服务器连接。所讨论的api确实提供了基于时间戳获取数据的机制(例如,#34;获取自xxx&#34以来发生的所有变化;)。由于数据量非常大,我将本地副本保存在数据库中,并每小时检查远程端的更改。

虽然这使得应用程序可以抵御网络问题(维护中的远程服务器,网络中断等)并使员工能够继续使用该应用程序,但是存在一个巨大的问题:

有问题的api还提供写访问权限。例如。我的应用程序可以指示远程服务器创建一个新对象。目前我通过api发送请求,一旦成功,也在我的本地数据库中创建对象。它最终将通过每小时数据提取传播,我的应用程序(理想情况下)看到不需要对本地数据库进行任何更改。

现在当api无法访问时,我在我的数据库中创建对象,并缓存请求,直到再次访问api。这有很多问题:

  1. 如果请求失败(由于事先没有验证错误),我最终得到数据库中的一个甚至不存在的对象。我可以删除它,但似乎很难向用户解释(" api出了问题,我们再次删除了该对象")。
  2. 问题特别是在依赖操作排队时级联。例如。创建对象,以及另外两个修改它的请求。当初始创建失败时,修改请求也会失败(因为远程端不存在该对象)
  3. 最坏的情况是删除 - 当一个对象在本地删除但不会在远程站点上删除时,我无法(轻松)恢复它。
  4. 有人可能建议永远不要在本地创建对象,并让它们仅通过每小时数据同步传播。遗憾的是,这不是一个选择。如果api无法访问,则可能需要数小时。并且员工可以继续使用该应用程序(当所述对象不在本地存在时,他们不能这样做。)

    所以底线: 如何处理这样的情况,其中api可能无法访问,但某些请求必须在本地缓存并在api再次可达时重复。特别是如何处理那些不可预测的请求失败的情况。

0 个答案:

没有答案