API 响应失败时数据库回滚
Database rollback on API response failure
我们的一位客户非常坚持他们希望“来自任何 API”(这意味着他们不想为更改付费)。不过,我似乎很难找到这方面的明确信息。
假设我们有一个 API 可以为日历创建约会。服务器端一切顺利,数据提交到数据库。 API 尝试发送 HTTP 201(已创建)响应,但出现问题。客户端忽略响应,或连接断开,...
他们希望我们的 API 在特定情况下撤消数据库更改。
问题不在于如何做到这一点,而是大多数 API 是否会这样做?这是标准行为吗?或者类似拒绝重复创建请求的东西?
困难的部分当然是要真正知道 API 是否未能发送响应,就我所关心的问题的症结而言,这不是通常的行为实施的。如果用户愿意输入数据,您可以继续并存储它。如果响应由于超时而没有 return 正确(您不对用户“忽略”响应负责),则客户端代码可以在失败时刷新并加载新数据。并且用户可以自己删除输入的数据(前提是您为此提供了端点)
根据数据库的不同,可以使 API 的所有数据库更改都可逆。例如,对于 SQL,您使用 [SQL 事务][1] 使用 commit
、rollback
和 savepoints
。很可能有类似的机制可用于 noSQL.
我们的一位客户非常坚持他们希望“来自任何 API”(这意味着他们不想为更改付费)。不过,我似乎很难找到这方面的明确信息。
假设我们有一个 API 可以为日历创建约会。服务器端一切顺利,数据提交到数据库。 API 尝试发送 HTTP 201(已创建)响应,但出现问题。客户端忽略响应,或连接断开,...
他们希望我们的 API 在特定情况下撤消数据库更改。
问题不在于如何做到这一点,而是大多数 API 是否会这样做?这是标准行为吗?或者类似拒绝重复创建请求的东西?
困难的部分当然是要真正知道 API 是否未能发送响应,就我所关心的问题的症结而言,这不是通常的行为实施的。如果用户愿意输入数据,您可以继续并存储它。如果响应由于超时而没有 return 正确(您不对用户“忽略”响应负责),则客户端代码可以在失败时刷新并加载新数据。并且用户可以自己删除输入的数据(前提是您为此提供了端点)
根据数据库的不同,可以使 API 的所有数据库更改都可逆。例如,对于 SQL,您使用 [SQL 事务][1] 使用 commit
、rollback
和 savepoints
。很可能有类似的机制可用于 noSQL.