我可以将 EJB 模块用作 RESTful Web 服务吗?
以前有关于该主题的问题,例如下面的问题,但它们是从一年到三年前。“为什么我不能在 ejb 模块中创建 RESTful Web 服务?”
从那以后有没有任何升级。
好吧,现在有可能(利用 CDI)。
请参阅此处的 JavaEE 教程。
是的,这是可以做到的。Restful Web 服务最初是在 HTTP 的上下文中描述的,但我想它不仅限于该协议。不过,对如何使用主要 HTTP 操作有良好的基础知识会很好。
因此,您将需要提供服务的 bean 方法来遵循基本规则。
在实现 EJB 模块的上下文中要注意的关键事项是:
资源
(1) 资源是任何具有身份的东西。
(2) 每个资源都有一个 URI。
(3) URI 是“不透明的”,不公开其实现的细节。
资源是可以用作您服务的“货币”的任何东西。如果客户端从特定方法返回代表狗的特定表示形式的对象,他们应该能够使用该对象与可能需要代表狗的其他方法对话。如果要在多个地方使用代表狗的那个对象,那么它有一个标识符和一个获取它的方法。方法名 + 标识符 = URI(唯一资源标识符)。
协议
(4)GET 操作是“幂等的”,没有副作用。
(5) 任何没有副作用的请求都应该使用GET。
(6) 所有交互都是无状态的。
您可能希望以 getDog(Long dogID) 的形式实现 bean 方法。哪个是您的 dogID 标识符的狗的 URI。所有带有 getXXXX() 的方法都不会对服务的其余部分产生副作用。如果只在服务上执行 getXXX(),后端不会改变一点。
所有交互都是无状态的。所以只使用无状态 bean。
陈述
(7) 记录数据和元数据格式。
(8) 数据有多种形式。
(9) 陈述包括指向其他资源的链接。
因此,如果您的客户用作“货币”的狗对象上引用了所有者(最好此引用应采用标识符的形式,即 ownerID),则该标识符可用于使用 getOwner( ownerID),它的 URI。
风格
(10) 记录和宣传您的服务 API。
(11) 使用现有的标准和技术。
(12) 完善和扩展架构、标准和工具
确保您的方法名称是自描述的并且自始至终是通用的。即updateDog(Dog dog)、create(Dog dog)、deleteDog(Long dogID)。因此,如果客户端想要创建一个所有者,他们将通过资源“所有者”的名称和在前面的示例中通过 Dog 表示中的引用获得的标识符立即知道方法名称是什么。
对不起,答案很长。