【RESTEasy】学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35448976/article/details/82735806

1.1、了解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) 等。

1.2、基于 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 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。

1.3、了解JAX-RS是什么?

       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。

       目前比较流行的JAX-RS实现有以下几种:Apache CXF,开源的Web服务框架开源组织Apache的实现。Jersey,由Sun提供的JAX-RS的参考实现。RestEasy,JBoss的JAX-RS的实现。

1.4、RESTEasy

       RESTEasy是JBoss的一个开源项目,提供一套完整的框架帮助开发人员构建RESTful Web Service和RESTful Java应用程序。它是JAX-RS 2.0规范的一个完整实现并通过JCP认证,通过Http协议对外提供基于Java API的 RestFul Web Service。RestEasy可以运行在任何Servlet容器中,作为JBoss的官方实现它可以更好的和Jboss服务器紧密融合从而提供更好的用户体验。

       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

1.5、RESTEasy简单实用

官方文档:http://docs.jboss.org/resteasy/docs/3.0.24.Final/userguide/html_single/index.html

step1:创建webapp项目

step2:添加tomcat7插件支持

<build>

<plugins>

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.1</version>

<configuration>

<port>8080</port>

<path>/api</path>

<uriEncoding>UTF-8</uriEncoding>

<finalName>api</finalName>

<server>tomcat7</server>

</configuration>

</plugin>

</plugins>

</build>

step3:引入RESTEasy依赖

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.7</maven.compiler.source>

<maven.compiler.target>1.7</maven.compiler.target>

<resteasy.version>3.0.9.Final</resteasy.version>

</properties>

<dependency>

<groupId>org.jboss.resteasy</groupId>

<artifactId>resteasy-servlet-initializer</artifactId>

<version>${resteasy.version}</version>

</dependency>

<dependency>

<groupId>org.jboss.resteasy</groupId>

<artifactId>resteasy-jaxrs</artifactId>

<version>${resteasy.version}</version>

</dependency>

<dependency>

<groupId>org.jboss.resteasy</groupId>

<artifactId>resteasy-jackson-provider</artifactId>

<version>${resteasy.version}</version>

</dependency>

<dependency>

<groupId>org.jboss.resteasy</groupId>

<artifactId>resteasy-jaxb-provider</artifactId>

<version>${resteasy.version}</version>

</dependency>

step4:配置RESTEasy

<context-param>

<param-name>resteasy.resources</param-name>

<!--将要发布Rest服务的资源类-->

<param-value>com.lfsenior.TestService</param-value>

</context-param>

<context-param>

<!--关闭自动扫描-->

<param-name>resteasy.scan.providers</param-name>

<param-value>false</param-value>

</context-param>



<listener>

<!--服务启动监听器-->

<listener-class>

org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap

</listener-class>

</listener>


<servlet>

<!--请求分发器-->

<servlet-name>resteasy-servlet</servlet-name>

<servlet-class>

org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher

</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>resteasy-servlet</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

step5:编写TestService

@Path("/test")

@Produces(value = {MediaType.APPLICATION_JSON})

public class TestService {

@GET

@Path("/geta")

public Map<String,Object> signApp(){

Map param=new HashMap();

param.put("test","test");

return param;

}

}

step6:方法二Filter方式(推荐使用次方法)

<filter>

<filter-name>Resteasy</filter-name>

<filter-class>

org.jboss.resteasy.plugins.server.servlet.FilterDispatcher

</filter-class>

<init-param>

<param-name>javax.ws.rs.Application</param-name>

<param-value>com.lfsenior.TestApplication</param-value>

</init-param>

</filter>



<filter-mapping>

<filter-name>Resteasy</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

step7:Filter核心处理

public class TestApplication extends Application{

private Set<Object> singletons=new HashSet<Object>();

private Set<Class<?>> empty=new HashSet<Class<?>>();

public TestApplication(){

init();

}

private void init(){

initRestfulServices();

}

private void initRestfulServices(){

//添加Rest服务发布类

empty.add(TestService.class);

}



@Override

public Set<Object> getSingletons(){

return singletons;

}



@Override

public Set<Class<?>> getClasses(){

return empty;

}

}

请求地址:http://localhost:8080/api/test/geta

猜你喜欢

转载自blog.csdn.net/qq_35448976/article/details/82735806