【发布时间】:2019-07-12 05:11:23
【问题描述】:
我正在用 Java 实现一系列 REST 微服务 - 我们称它们为“适配器”。
每个服务都从特定的源类型读取数据,并以相同的方式提供结果。主要思想是为所有这些提供相同的接口(服务合同),以获得可互换性。我想避免代码重复并重用服务的服务合同。
看来我正在重新发明轮子。对此有标准方法吗?
我尝试以 Java 接口的形式提取 Spring MVC Controller 类和随附的 DAO 类CustomObject 的服务契约:
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/方法中有一些工具吗?
【问题讨论】:
标签: java rest spring-boot dependencies