首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST :如何确保原子性?

REST :如何确保原子性?
EN

Stack Overflow用户
提问于 2016-05-27 06:24:05
回答 2查看 1.9K关注 0票数 1

我正在开发一个小型REST API。当我开始分析所有可能的故障场景(为了创建一个可靠和稳定的系统而必须处理的)时,我开始思考如何使我的API成为原子化的。

如果我们使用一个通过POST API创建联系人的简单例子。

  • 服务器获得新联系人的POST请求。
  • 在DB中创建联系人。
  • 创建要发送回客户端的响应。
  • 服务器在发送响应之前崩溃。
  • 客户端会得到一个超时错误(或者连接被拒绝?)

客户端肯定会认为联系人创建失败了,但实际上,联系人在DB中。

这是一个我们可以忽略的罕见案例吗?大公司如何处理这样的问题?

EN

回答 2

Stack Overflow用户

发布于 2016-05-27 06:35:41

要处理这个问题,您应该使写API成为幂等的,也就是说,如果同一个操作多次执行,结果应该与只执行一次操作相同。

emailAddress说,要在当前的示例中实现这一点,您需要能够根据某些参数唯一地标识联系人。因此,如果createContact再次使用相同的emailAddress调用,请在DB中签入是否已经存在与emailAddress的联系人。如果是,则返回现有联系人。否则,与emailAddress创建一个新的联系人并返回它。

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2016-05-27 15:35:14

如果请求超时,客户端不应对其失败或成功作出任何假设。

如果只是用户从web表单发出请求,那么超时应该只向用户公开,他们可以按后退按钮,检查操作是否成功,如果没有,则再次提交请求。(只要你始终保持一贯的状态,这就很好了。如果您的操作有多个步骤并且中途失败,则需要回滚。)

但是,如果可靠的消息传递对您的应用程序很重要,则必须使用库或构建自己的可靠消息传递层。这可以通过让客户端为每个请求分配一个唯一ID,并让另一个请求允许您稍后检查该请求ID的结果来工作。然后,您可以进行自动重试,但只有在必要的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37476230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档