[英]EJB-like communication of REST components
我正在设计具有不同组件的软件,这些组件需要通过 REST 接口相互通信。
我已经看到并实施了解决方案,其中软件的不同组件(部署在同一集群上)将通过声明和注入 EJB bean 进行通信。 这样,通过在 separate.jar 依赖项中定义公共接口和 DTO 来标准化通信真的很容易。
这种舒适度和标准化水平是我希望通过 RESTful 服务在我的软件的基于 Java 的组件之间实现的。
想象一下这样的事情:
比方说,我有一个REST Client
(C) 和一个REST Server
(S)。 我希望能够通过一个公共接口在它们之间进行通信,该接口在S
中实现并由C
调用。 这个公共接口在API component
(I) 中。
这意味着I
将有一个界面:
@RestController
@RequestMapping("/rest/user")
public class UserController {
@GetMapping("list")
ResponseEntity<List<UsersModel>> getUserList(OAuth2LoginAuthenticationToken token);
}
在C
中,它可以像这样使用:
public class Sg {
private final UserController userController;
...
public void method(OAuth2LoginAuthenticationToken token) {
...
userController.getUserList(token);
...
}
}
最后,在S
中:
public class UserControllerImpl implements UserController {
@Override
public ResponseEntity<List<UsersModel>> getUserList(OAuth2LoginAuthenticationToken token) {
...
}
}
唯一需要的配置是告诉客户端服务器的上下文根(和主机地址),其他一切都以注释的形式出现在公共接口中。
由于并非所有组件都必须基于 Java,因此以典型的类似 REST 的方式调用 REST 资源非常重要,因此不考虑那些 Java 远程服务调用机制。
我正在研究 JAX-RS,它看起来很有前途,但缺少一些不错的功能。 例如,没有一个通用接口告诉客户端可以在服务器上的哪个端点找到 REST 资源,方法名称也没有,等等。AFAIK,在客户端,您只能调用表示 HTTP 方法的方法请求,这是一个无赖。
我对这个规格不满意吗? 我对 REST 服务还没有真正的经验,所以我真的不知道我是否在谈论 REST 服务范围之外的东西。 我面临的问题是否已经存在解决方案?
经过更深入的研究,我发现RESTeasy
已经有了解决方案。
您需要使用ProxyBuilder
创建接口的代理,仅此而已。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.