在微服务和客户端库项目之间共享模型是一种好习惯吗?
Is it a good practise to share models between Microservice and Client library projects?
我正在为它创建一个 REST 微服务和一个客户端库。对于它们两者,我将使用相同的语言(在本例中为 C#)。
在这些项目之间共享 Response/Request 模型是个好习惯吗?或者我的客户项目应该是独立的,所以有自己的(实际上是相同的)模型?
Is it a good practice to share Response/Request models between ... a
REST microservice and a Client library?
是的,这是一个很好的做法。 Request/response 模型是服务定义的一部分,因此是服务与其消费者之间应该共享的少数内容之一。服务和消费者之间的垂直耦合是不可避免的,因此应该接受。但是,在服务之间共享模型时应小心。
now I am confusing about the following: if another microservice will
use that Client library
我不确定你的意思 - 该服务不使用客户端库。
理想情况下,服务之间不应共享模型,除非它们是代表安全、监控等横切关注点的模型。
可能会有 o.k 的情况。分享这些模型。一般来说,我会把它们分开。客户端上的模型不必担心数据来自何处以及这些模型(服务端)更改的频率以及该更改是否会直接影响它们。将这两个方面解耦可以使您的 build/deploy 周期更加稳定,并且不会在服务模型发生变化等时强制客户端重建。此外,客户端模型的不同部分可能会从不同的微服务中获取数据。我想这完全取决于您的整体模型复杂性。
简短的回答是否定的
长话短说,微服务架构的原则和目的就是保持服务分离。这样我们就可以从中获益(例如更高的迭代频率、更容易测试、更低的部署风险等)
该服务根本不应该知道其他服务。所以他们可以使用不同的语言和技术栈。如果服务和消费者之间共享模型,会把服务绑定在一起,升级困难(比如升级Java版本,springboot版本),失去使用不同语言的自由。
当服务人口增长时,依赖关系将非常难以管理。相反,我们应该使用定义明确的 API 文档(例如 Swagger 可以帮助使用使文档始终保持最新),并进行版本控制以使 API 向后兼容。
我正在为它创建一个 REST 微服务和一个客户端库。对于它们两者,我将使用相同的语言(在本例中为 C#)。
在这些项目之间共享 Response/Request 模型是个好习惯吗?或者我的客户项目应该是独立的,所以有自己的(实际上是相同的)模型?
Is it a good practice to share Response/Request models between ... a REST microservice and a Client library?
是的,这是一个很好的做法。 Request/response 模型是服务定义的一部分,因此是服务与其消费者之间应该共享的少数内容之一。服务和消费者之间的垂直耦合是不可避免的,因此应该接受。但是,在服务之间共享模型时应小心。
now I am confusing about the following: if another microservice will use that Client library
我不确定你的意思 - 该服务不使用客户端库。
理想情况下,服务之间不应共享模型,除非它们是代表安全、监控等横切关注点的模型。
可能会有 o.k 的情况。分享这些模型。一般来说,我会把它们分开。客户端上的模型不必担心数据来自何处以及这些模型(服务端)更改的频率以及该更改是否会直接影响它们。将这两个方面解耦可以使您的 build/deploy 周期更加稳定,并且不会在服务模型发生变化等时强制客户端重建。此外,客户端模型的不同部分可能会从不同的微服务中获取数据。我想这完全取决于您的整体模型复杂性。
简短的回答是否定的
长话短说,微服务架构的原则和目的就是保持服务分离。这样我们就可以从中获益(例如更高的迭代频率、更容易测试、更低的部署风险等)
该服务根本不应该知道其他服务。所以他们可以使用不同的语言和技术栈。如果服务和消费者之间共享模型,会把服务绑定在一起,升级困难(比如升级Java版本,springboot版本),失去使用不同语言的自由。
当服务人口增长时,依赖关系将非常难以管理。相反,我们应该使用定义明确的 API 文档(例如 Swagger 可以帮助使用使文档始终保持最新),并进行版本控制以使 API 向后兼容。