我正在开发一个小型REST API。当我开始分析所有可能的故障场景(为了创建一个可靠和稳定的系统而必须处理的)时,我开始思考如何使我的API成为原子化的。
如果我们使用一个通过POST API创建联系人的简单例子。
客户端肯定会认为联系人创建失败了,但实际上,联系人在DB中。
这是一个我们可以忽略的罕见案例吗?大公司如何处理这样的问题?
发布于 2016-05-27 06:35:41
要处理这个问题,您应该使写API成为幂等的,也就是说,如果同一个操作多次执行,结果应该与只执行一次操作相同。
emailAddress说,要在当前的示例中实现这一点,您需要能够根据某些参数唯一地标识联系人。因此,如果createContact再次使用相同的emailAddress调用,请在DB中签入是否已经存在与emailAddress的联系人。如果是,则返回现有联系人。否则,与emailAddress创建一个新的联系人并返回它。
希望这能有所帮助。
发布于 2016-05-27 15:35:14
如果请求超时,客户端不应对其失败或成功作出任何假设。
如果只是用户从web表单发出请求,那么超时应该只向用户公开,他们可以按后退按钮,检查操作是否成功,如果没有,则再次提交请求。(只要你始终保持一贯的状态,这就很好了。如果您的操作有多个步骤并且中途失败,则需要回滚。)
但是,如果可靠的消息传递对您的应用程序很重要,则必须使用库或构建自己的可靠消息传递层。这可以通过让客户端为每个请求分配一个唯一ID,并让另一个请求允许您稍后检查该请求ID的结果来工作。然后,您可以进行自动重试,但只有在必要的地方。
https://stackoverflow.com/questions/37476230
复制相似问题