我该如何处理API调用之间的失败

时间:2018-04-28 19:13:38

标签: rest api design-patterns architecture

我遇到一个问题,可以通过一系列现有的Http请求执行操作,如下所示:

api1() -> api2() -> api3()

或者我将不得不创建一个新的API,它可以立即执行它,例如:

apiNew() {
   api1();
   api2();
   api3();
}

然后我将向apiNew()发送请求并让它完成所有这三个功能。

但是,由于所有三个api都涉及数据库更改,因此每个API都包含一个事务块。

如果我单独调用它,问题就出现了。然后,如果api1()成功但api2()失败,则数据库处于某种in the middle状态,这需要手动更改,因此它可以移动到正确的状态。

我现在的做法是创建apiNew()并将所有三个包装在同一个事务块中,以便所有数据库更改都在同一个事务下进行。

我只是想知道,是否还有其他方法可以完成此类工作,因此我可以重用api1() api2()api3(),以便正确处理错误无需将代码重写为单个API调用。

1 个答案:

答案 0 :(得分:0)

您可以在没有实际交易的情况下执行此操作,但可以通过重新构建API和数据库并使用idempotency keys