• java rest jax-rs 漫谈


    rest是什么

    REST是英文RepresentationalState Transfer 的缩写,有中文翻译为“具象状态传输”。REST 这个术语是由 RoyFielding 在他的博士论文《Architectural Styles and the Design ofNetwork-based Software Architectures 》中提出的。REST并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。REST 基于 HTTP,URI,以及 XML 这些现有的广泛流行的协议和标准,伴随着 REST,HTTP 协议得到了更加正确的使用。
    相较于基于 SOAP 和 WSDL 的 Web 服务,REST 模式提供了更为简洁的实现方案。目前,越来越多的 Web 服务开始采用 REST 风格设计和实现,真实世界中比较著名的 REST 服务包括:Google AJAX 搜索 API、Amazon Simple Storage Service (AmazonS3) 等。

    基于 REST 的 Web 服务遵循一些基本的设计原则:

    1)系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的 URI。
    2)以遵循RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create, Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:
    若要创建资源,应该使用 POST方法, URI : xxx/book(在服务器端新建图书信息,需提供该图书所有信息)
    若要检索某个资源,应该使用 GET 方法, URI:xxx/book/{ID} (从服务器端获得某图书信息)
    若要更改资源状态或对其进行更新,应该使用 PUT 方法,URI:xxx/book/{ID}(在服务器端更新某已存在的图书信息,需提供更新的内容)
    若要删除某个资源,应该使用 DELETE 方法, URI :xxx/book/{ID} (从服务器端删除某图书信息)
    URI 所访问的每个资源都可以使用不同的形式加以表示(比如 XML 或者 JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。
     

    jax-rs是什么

    我的理解

    就是基于上面说的那些rest的定义也好,设计原则也好,java自己也想让使用者按照这样的风格去使用,所以人家自己定义了一套统一的规范,可以让使用者更加方便的来实现上面的这些个各种好处。大体上就是 人家提供了一些列的标注,你自己有个pojo类,吧这些标注都标注上,然后别人一看就知道访问路径,返回信息,参数信息等都是什么, 但是要想将别人的请求映射到这些个方法里并执行并返回,还是需要自己去实现的,由此就产生了很多rest框架,这些框架就是按照人家的这个规范来实现的。

    下面是比较好的摘抄。

    Java EE 6 引入了对 JSR-311 的支持。JSR-311(JAX-RS:JavaAPI for RESTful Web Services)旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架。同时,JAX-RS 使用 POJO 编程模型和基于标注的配置,并集成了JAXB,从而可以有效缩短 REST 应用的开发周期。
    JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源. 这些标注包括以下:
    @Path:标注资源类或方法的相对路径。
    @GET,@PUT,@POST,@DELETE:标注方法是用的HTTP请求的类型。
    @Produces:标注返回的MIME媒体类型。
    @Consumes:标注可接受请求的MIME媒体类型。
    @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam:分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。
    更通俗些说如果你用java写了一套框架,当开发者自己写的JAVA类使用了JAX-RS定义的这些注解标注过,然后通过你写的这套框架就可以将有这些JAX-RS标注的类发布成web资源,供其他客户端程序去调用。那么你写的这套框架就是一套RestFul Web Service框架,就是JAX-RS规范的实现者之一,是JAX-RS标准定义的这些标注的解释执行者。
     

    jax-rs实现框架 resteasy

    resteasy简介

    RESTEasy是JBoss的一个开源项目,提供一套完整的框架帮助开发人员构建RESTful Web Service和RESTful Java应用程序。它是JAX-RS 2.0规范的一个完整实现并通过JCP认证,通过Http协议对外提供基于Java API的 RestFul Web Service。
    RestEasy可以运行在任何Servlet容器中,作为JBoss的官方实现它可以更好的和Jboss服务器紧密融合从而提供更好的用户体验。
    作为JAX-RS的标准实现,RestEasy还具有以下亮点特性:
    1)不需要配置文件,只要把JARs文件放到类路径里面,添加 @Path等标注就可以了
    2)完全的把 RESTEeasy 配置作为Seam 组件来看待
    3)HTTP 请求由Seam来提供,不需要一个额外的Servlet
    4)Resources 和providers可以作为Seam components (JavaBean or EJB),具有全面的Seaminjection,lifecycle, interception, 等功能支持
    5)支持在客户端与服务器端自动实现GZIP解压缩
    6)支持异步请求处理
    7)支持多种数据传输格式: XML, JSON, YAML, Fastinfoset, Multipart, XOP, Atom
    ……
     
     

    resteasy使用方法

    大体使用方法就三部,首先,下载相应的框架jar包,然后,按照jax-rs规范编写自己的service类,最后,在webxml中配置resteasy的两个类即可。配置好了后,项目启动的时候,resteasy就会将你写的service类加载初始化好,并且拦截对应的路径,按照你的service类jax-rs规范的路径匹配,寻找对应方法,并且通过反射来执行,并将返回值返回。类似下图
     

    resteasy原理概述

    简单查阅了网络的源码分析和自己的简单查看,大体上resteasy的工作原理分两步,正好也就配置两个类,
    项目监听器ResteasyBootstrap
    他主要做的工作就是,在项目启动的时候,执行自己的方法,将resteasy框架的各种自己的组件都给初始化起来,其中就会将你在web.xml中配置的(或者其他方法配置的)services类给加载到框架中,解析包装一下,以便后面使用。
    请求分发 HttpServletDispatcher
    这个分发器就将过来的请求,进行解析,并且通过第一步加载进来的service的信息,找到匹配的包装类,找到对应的方法,通过反射就直接执行了,并将执行结果返回回去。
    resteasy好像还有另外一种配置方法,但是不管咋说,肯定都是这么些个工作,先加载,后使用。
     

    dubbox使用resteasy

    最近在看dubbox的时候,看到dubbox在dubbo的基础上加上了rest风格的服务实现,jax-rs规范实现框架就是用的resteasy,看了下配置rest的时候,也得在web.xml中配置如下
    查看里面的源码就知道,里面也封装有jboss的那个原声resteasy实现方式。
     
  • 相关阅读:
    正则表达式获取字符串中html<input>标签指定value值
    [转]利用SqlBulkCopy快速大批量导入数据(SqlBulkCopy强大)
    ASP.NET数据库操作常用类
    response.redirect 和Server.Transfer有什么区别?
    数据驱动的依存句法分析方法简介(一)
    C#序列化问题
    MSSQL 标量函数
    事件和委托问题转
    Copy指定目录下的所有文件到新位置
    页面指定播放视频
  • 原文地址:https://www.cnblogs.com/liouwei4083/p/6126052.html
Copyright © 2020-2023  润新知