java - REST 组件的类似 EJB 的通信
问题描述
我正在设计具有不同组件的软件,这些组件需要通过 REST 接口相互通信。
我已经看到并实现了解决方案,其中软件的不同组件(部署在同一个集群上)将通过声明和注入 EJB bean 进行通信。这样,通过在单独的 .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
来创建界面的代理,仅此而已。
推荐阅读
- r - 如何将数据从一个级别移动到另一个级别
- javascript - ev.target.id 不返回元素 id
- jquery - var 值在每个语句之外未被识别
- c# - 在 ASP.NET MVC 中使用 TimePicker 和 razor 获取时间跨度类型的值
- android - Android:如何通过浮动上下文菜单项单击获取列表项属性
- hypothesis-test - 如果 A/B 测试的样本量大于总体,你会怎么做?
- c# - IOException: 意外结束 Stream,内容可能已被另一个组件读取
- xaml - 在 Grid 单元格中垂直对齐 BoxView
- reactjs - 无法将 MERN 部署到 heroku
- angular - 构建期间来自 Terser 的运行时错误 --prod