【发布时间】:2018-06-27 20:55:44
【问题描述】:
目前,我们有一个庞大的 API,供我们的后台、前端和公共 API 使用。
这让我很头疼,因为在构建新端点时,我在代码中发现了很多应用程序特定的逻辑,这些逻辑我不一定要包含在我的端点中。例如,创建用户的代码可能包含发送欢迎电子邮件的代码,但因为后台端点不需要这样做,所以我需要添加一个没有该逻辑的新端点。
我正在考虑进行一次大型重构,将我们的代码库分解为多个较小且高度特定的服务 API,然后在这些 API 之上构建一组小型应用 API。
因此,例如,用于创建新用户的应用程序端点在重构后可能会执行以下操作:
customerService.createCustomer();
paymentService.chargeCard();
emailService.sendWelcomeEmail();
应用程序和服务 API 将是完全独立的代码库(也许每个服务都有一个单独的代码库),它们也可以使用不同的语言构建。它们只会通过 REST API 调用进行交互。它们将位于同一个本地网络上,因此延迟应该不是一个大问题。
这是个坏主意吗?我以前从未见过/工作过将两者分开的代码库,所以也许有更好的架构来实现我正在寻找的灵活性和可维护性?
建议、链接或 cmets 将不胜感激。
【问题讨论】:
-
创建几个专用且可重用的服务确实是个好主意。当我看到您的工作流程时,我认为您应该尝试使用事件驱动架构。因此,当创建用户时,您的应用程序只需发送一个包含新用户联系信息的事件。另一个专用应用程序只等待此类事件并将邮件发送给新客户。如果您有多个此类交互,那么引入事件总线可能是值得的。如果不是您的方法,则已经有效。
标签: rest api architecture soa