[英]In a microservice architecture, what is the good way of sharing the request and response contracts among the internal clients of one service
我有 4 项服务,如下所示 -
个人助理服务在内部调用 3 个服务,Notes-service、Reminder-service 和 Todo-service。 Notes-service 将在其中包含这两个请求和响应 pojos --
但是要在 Rest 客户端的帮助下调用它,Personal-assistant 也需要这些 pojo。 一种可能的方法是创建一个名为 common-service 的公共模块,并将每个服务的可共享请求响应对象放在 common-service 中。 每个服务模块都将依赖于公共服务。
有什么好的方法可以使代码整洁和模块化并使部署独立。
我会考虑两种可能性:
1.- 使用像 swagger(或类似)这样的框架来公开 API 规范(例如通过 OpenAPI)。 这可以与代码生成工具一起使用来生成客户端。 并在需要使用该服务的客户端的项目中将客户端生成作为构建过程的一部分。 不要对生成的代码进行版本控制,这是一种不好的做法。
2.- 在每个服务项目中创建一个合同模块,其中您将只有合同(请求、响应和 api 接口,如 JAX-RS 接口或 Spring 接口)。 该模块可以用作需要该服务客户端的项目中的依赖项。
使用哪一种取决于您使用的技术以及使用的客户要求和标准。
更新示例
例如,使用选项 2, notes
项目将具有以下项目结构:
-notes-parent
-notes-contract
-notes-service
每一个都有它的 pom.xml.:
并使用所有服务执行此操作。 每个xxx-service
子模块都将依赖它想要查询的其他服务的所有yyy-contract
模块。
您可以创建一个单独的模块来保留所有 json 模式(合同)以进行请求和响应,并使用 maven 插件(如 jsonschema2pojo-in-plugin-)使 object 创建成为构建过程的一部分。 您可以在每个客户端中包含此模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.