我们正在构建一个微型服务应用程序,客户可以在其中创建项目。下图显示了这一过程的技术流程:

我的问题是:网关应该向客户端返回什么HTTP响应(步骤1.)?
我最初的想法是返回202分,但问题是我还不知道Location (/projects/{id}),因为项目的id将在项目管理服务中创建。
发布于 2017-05-11 19:13:30
考虑到新创建的project实体的is在请求时不知道(即它是在插入数据库之后生成的),您确实无法为project资源生成url。
相反,您可以在发送到总线之前将ID (即1234-abcd-5678-efgh)分配给命令,并跟踪它在API网关本身上的执行状态。然后,您可以使用命令执行状态端点(如/commands/1234-abcd-5678-efgh )来响应客户机,在那里它可以通过轮询进行查询。
另一种方法是使用另一个服务,它将保留和交付唯一的it,但是您必须对它进行阻塞调用,这会损害可伸缩性。或者,您可以在API网关本身(位于同一节点上)内承载此服务,以尽量减少延迟。此外,在项目创建失败的情况下,可能会丢失一些ID,但可以通过在这些情况下释放这些ID来弥补这种风险(从而增加了体系结构的复杂性)。
第三种解决方案可以是使用project代理ID,如GUID,指定为命令中包含的project属性,其目的是使用只能在进程的预创建阶段使用的备用标识。然后,对客户机的响应可以是这样的:/projects/by-guid/1234-abcd-5678-efgh,在创建project之后,对这个url的GET将永久地重定向到最终的项目url。
https://stackoverflow.com/questions/43910795
复制相似问题