繁体   English   中英

REST 组件的类 EJB 通信

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM