我们正在构建一个微服务应用程序,客户可以在其中创建projects。下图展示了该过程的技术流程:
我的问题:API 网关应向客户端返回什么 HTTP 响应(步骤 1)?
我最初的想法是返回 202,但问题是我不知道Location
yet (/projects/{id}
),因为 idproject将在项目管理服务处创建。
考虑到新创建的IDproject
实体在请求时未知(即它是在插入数据库后生成的),您确实无法生成指向该实体的 urlproject
资源。
相反,您可以分配一个 ID(即1234-abcd-5678-efgh
) 在发送到总线之前添加到命令中,并在 API 网关本身上跟踪其执行状态。然后您可以使用命令执行状态端点响应客户端,例如/commands/1234-abcd-5678-efgh
可以通过轮询的方式进行查询。
另一种方法是使用另一个服务来保留和提供唯一 ID,但您必须对其进行阻塞调用,这会损害可扩展性。或者,您可以在 API 网关本身内部(同一节点上)托管此服务,以最大程度地减少延迟。此外,如果项目创建失败,则存在丢失某些 ID 的风险,但这可以通过在这些情况下释放这些 ID 来补偿(从而增加架构复杂性)。
第三种解决方案可能是使用project
代理 ID,如 UUID,分配为project
,包含在命令中,具有只能在进程的预创建阶段使用的备用身份的目的。那么,对客户端的响应可能是这样的:/projects/by-guid/1234-abcd-5678-efgh
并在之后project
被创建了一个GET
对此url
将永久重定向到最终项目 URL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)