java - REST 和 RESTful WS

标签 java web-services rest jersey jax-rs

我曾在高层(不是很详尽)从事 RESTful Web 服务的工作,编写了一些基于 REST 的 Web 服务。

为了开始我的 RESTful WS 之旅,我阅读了在线文章(wiki、在线教程等),我开始知道它是一种指定约束的架构风格,当应用于 Web 服务时会产生所需的属性,例如性能、可扩展性等。好的,这是这个概念的理论部分。

使用JAX-RS的简单示例:

@Path("/simple")
public class SimpleRESTService {

    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param") String message) {
        String output = "Jersey say : " + message;
        return Response.status(200).entity(output).build();
    }
}

我的疑问是:

如果 REST 是架构风格(并使用这些准则构建 RESTful Web 服务),那么 JAX-RS 会做什么?据我了解,REST 只是架构风格而不是任何规范,JAX-RS 与此有什么关系?我很难理解这两个实体之间的关系。

谁能用简单的话帮我理解这一点。

最佳答案

REST 确实是一种独立于应用层协议(protocol)构建 Web 服务的架构风格(也可以通过 FTP 或 HTTP 实现)。

JAX-RS只是Java EE的一个标准化API,使用它您可以轻松地在Java中实现RESTful服务。它是一个帮助开发人员减轻负担的工具包,作为 Java EE 的一部分,它在 WildFly 等应用服务器中开箱即用地实现。

但请注意,使用 Spring Web MVC 和 Spring HATEOAS 模块在 Spring 等框架中创建 REST 服务也是可能的。

编辑:
尽管 REST 是一种定义明确的架构风格,但它(正如您所提到的)不是一个规范,因此开发人员对它有很多模糊的地方。

简而言之,它的全部内容就是“嘿,伙计,如果你以这种方式使用通信协议(protocol)(比如 HTTP),那么你将非常方便地进行更改和扩展,并且对于您服务的客户与您交谈”。

JAX-RS 使您能够使用动态部分定义服务端点(例如:/api/jediknights/{id},以便 id 可以是任何内容),从而更轻松地以以下格式响应客户端您(或您的客户)的愿望,例如 XML 或 JSON。它提供了方便的包装对象来包装您的响应正文以及状态代码和 header 以及许多其他方便的东西。

但问题是:作为开发人员,您有责任遵守 REST 风格规定的原则。 JAX-RS 不会真正向您强制执行任何操作。

公平地说,您甚至可以仅使用较低级别的 Servlet API 来实现 RESTful Web 服务。 JAX-RS 只是向您隐藏不必要的细节,让您的生活更轻松。

我希望它变得更清晰一点:)

关于java - REST 和 RESTful WS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316243/

相关文章:

java - Tomcat 中的 HBase 连接池?

java - 同步数据库 RESTful API

java - 如何将参数传递给模拟对象

java - 是否可以更改 IntelliJ 的 equals() 和 hashCode() 代码生成模板

java - 从 Web 服务解析日出和日落值

PHP session 从 android WebService 过期

java - Java中的数据结构,具有删除节点后的所有节点的操作

java - 在 k 均值算法中选择聚类值

java - 向 spring Rest api 发送 post 请求

javascript - 使用 ng-repeat 将表格行数据显示为模态