我正在用Java实现一系列REST微服务-我们称它们为“适配器”。
每个服务都从特定的源类型读取数据,并以相同的方式提供结果。主要思想是为所有这些接口都具有相同的接口(服务合同),以实现互换性。我想避免代码重复,并为服务重用服务合同。
似乎我正在重新发明轮子。有标准的方法吗?
我试图为Spring MVC Controller类和随附的DAO类CustomObject
提取Java接口形式的服务协定:
public interface AdapterController {
@RequestMapping(method = RequestMethod.GET, value = "/objects/{name}")
CustomObject getObject(@PathVariable final String name);
}
然后将它们放入单独的Maven项目中,将其设置为原始项目中的依赖项,然后重写REST控制器类,如下所示:
@RestController
public class DdAdapterController implements AdapterController {
@Override
public CustomObject getObject(String name) {
return model.getByName(name);
}
我也可以在客户端代码中重用DAO对象,但是接口类在客户端无用。
1)总结:是否可以在不同服务实现之间重用/共享服务协定?这要花多少钱?是否有共享服务合同的最佳实践?
2)下一个问题是关于服务合同和消费客户。服务与客户之间可以共享合同吗? Java /方法中是否有一些工具可以做到这一点?
答案 0 :(得分:1)
这违背了微服务的心态,从长远来看,共享代码是个坏主意。
如果您开始共享代码,则将慢慢地构建一个分布式的整体,其中多个服务相互依赖。
许多人早先谈到过:
microservices-dont-create-shared-libraries
Micro services: shared library vs code duplication
构建微服务的关键是:
答案 1 :(得分:0)
微服务是 以应用程序的形式构成应用程序的建筑风格 的服务
- 高度可维护和可测试
- 松散耦合
- 可独立部署
- 围绕业务功能组织。
可以使用WADL定义合同