【发布时间】:2013-06-10 13:17:47
【问题描述】:
我可以将 EJB 模块用作 RESTful Web 服务吗?
以前有关于该主题的问题,例如下面的问题,但它们是从一年到三年前。 “为什么我不能在 ejb 模块中创建 RESTful Web 服务?”
从那以后有没有升级。
【问题讨论】:
我可以将 EJB 模块用作 RESTful Web 服务吗?
以前有关于该主题的问题,例如下面的问题,但它们是从一年到三年前。 “为什么我不能在 ejb 模块中创建 RESTful Web 服务?”
从那以后有没有升级。
【问题讨论】:
嗯,现在有可能(利用 CDI)。
请参阅 JavaEE 教程here。
【讨论】:
是的,这可以做到。 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 表示中的引用获得的标识符知道方法名称是什么。
抱歉,回答太长了。
【讨论】: