Rest 在微服务体系结构中管理UI需求

Rest 在微服务体系结构中管理UI需求,rest,architecture,microservices,Rest,Architecture,Microservices,我们有不同的客户端应用程序(每个应用程序都使用不同的UI构建,并针对不同的销售渠道),用于捕获最终需要我们工厂处理的订单 起初,我们决定提供一个“订单”微服务,供所有这些客户机应用程序用于业务规则执行和数据存储。这项微服务还将触发我们的后台流程,如客户档案更新、订单分析、电子保险库的文档存储、发票、通信等 我们面临的挑战是,这些客户端应用程序是由我们外部的团队开发的(我们只是一个后台团队)。负责开发客户机应用程序的每个团队将能够向其用户提供不同的用户体验(一些团队将允许在不完整状态下保存订单,一

我们有不同的客户端应用程序(每个应用程序都使用不同的UI构建,并针对不同的销售渠道),用于捕获最终需要我们工厂处理的订单

起初,我们决定提供一个“订单”微服务,供所有这些客户机应用程序用于业务规则执行和数据存储。这项微服务还将触发我们的后台流程,如客户档案更新、订单分析、电子保险库的文档存储、发票、通信等

我们面临的挑战是,这些客户端应用程序是由我们外部的团队开发的(我们只是一个后台团队)。负责开发客户机应用程序的每个团队将能够向其用户提供不同的用户体验(一些团队将允许在不完整状态下保存订单,一些团队将允许使用特定工作流捕获数据,一些团队将使用文本字段而不是列表框来获取某些值,等等)

客户端应用程序行为的多样性是一个问题,因为我们的微服务逻辑将变得非常复杂,从而能够支持所有这些UI需求。此外,每次对某个客户端应用程序进行更改时,我们都必须修改我们的微服务,这是一种强耦合的情况

我的问题是:你对处理这个问题的最佳建议是什么?我们是否应该让每个应用程序以其所需的方式捕获数据(并在需要时将其保存在自己的数据库中),并让它们仅在订单完成且符合我们的API合同时调用我们的微服务

我们是否应该保持为每个人提供单一“订单”微服务的想法,并强制每个客户端应用程序以相同的方式捕获数据

还有其他选择吗

我们希望减少生态系统中数据和业务规则的重复,但同时我们不希望我们的“订单”微服务变得一团糟

非常感谢你的帮助

此外,每次对某个客户端应用程序进行更改时,我们都必须修改我们的微服务,这是一种强耦合的情况

这给我敲响了警钟。对UI的更改不应要求对后端服务进行更改。(例外情况是,如果一个新功能被添加到一个系统中,后端服务需要在支持该功能中发挥作用,但我不认为这是对客户端的更改。)正如您所说,这是强耦合,在微服务环境中必须避免

理想情况下,您的服务应该提供一个通用的编程API,该API足够灵活,可以支持多个UI(或其他非UI应用程序),而不需要了解UI的工作方式

听起来您需要对您的服务将承担和不承担的责任做出一些决定:

  • 对于您的通用订单服务来说,促进未完成订单的存储/检索/完成,或者强制其客户在其他地方管理这一点更有意义吗
  • 对于您的通用服务来说,提供帮助跟踪工作流的工具,或者强制需要该功能的UI在其他地方找到它,这更有意义吗
  • 对于希望显示列表框的客户机,您的通用订单服务提供有助于填充这些框的API有意义吗
我们是否应该让每个应用程序以其所需的方式捕获数据(并在需要时将其保存在自己的数据库中),并让它们仅在订单完成且符合我们的API合同时调用我们的微服务

这真的取决于你是否认为这是你的服务行为最明智的方式。每个用户界面的需求有多相似或不同,这将成为影响用户体验的因素。如果5个UI中有4个具有相同的需求,那么在您的服务中普遍支持这一需求是有意义的。如果每个UI的行为都与其他UI不同,那么将该功能放在您的generic orders服务中相当于将前端代码存储在不属于它的地方

这些决定似乎也有一些组织方面的考虑。如果使用您的服务的团队只是前端团队(即没有构建后端服务的能力/技能),那么仍需要有人构建他们所需的后端功能

我们是否应该保持为每个人提供单一“订单”微服务的想法,并强制每个客户端应用程序以相同的方式捕获数据

同意为每个人提供具有通用接口的单订单服务的想法。关于强制客户机应用程序以某种方式捕获数据,您的API将只指示它们需要做什么来创建订单。在调用您的服务之前,您不能(也不应该)对他们强制执行任何关于他们捕获数据方式的操作。他们可以随心所欲。问题其实围绕着您的服务是否支持各种捕获模式,还是将这种责任推回到前端

您对处理此问题的最佳建议是什么


与将使用该服务的团队协作。收集尽可能多的关于他们打算使用它的用例的信息。发现大多数人的共同点,选择你支持的。创建一个半正式的规范(例如,记录良好的规范),与客户团队共享,征求反馈意见,然后迭代。对于UIS在客户之间不常见的部分,强烈地告诉这些团队他们需要支持他们自己设计的那些元素,特别是如果它们代表了你的重要工作。

尝试格式化你的问题,突出重要的方面,创建项目和子项目,如果必要的话,创建段落,换行。这将使您的文本更清晰易读,更容易理解