用Jersey编写REST风格的web服务
本文英文原文来自REST with Java (JAX-RS) using Jersey – Tutorial
1. Rest ( representational state transfer)
1.1 概述
REST是一种基于HTTP协议的一种架构.在2000年被Roy Fielding提出
在REST风格的架构设计中,所有事物被看做是资源.一个资源能够通过
一个基本的http请求来获取.在REST架构的工程中,应该有一个server来提供访问资源,一个客户端来修改资源.每一个资源都能够被http请求来操作.每一个资源对应一个唯一的URI.
1.2 Http方法
在REST的架构设计中,一般有PUT,GET,POST,DELETE几种方法.
- GET这个一般就是只能读取一个资源.而不能够修改它.
- PUT会创建一个新的资源.必须是幂等的.
- DELETE会移除资源.这个操作也会是幂等的.获取的结果都是一样的.
- POST会创建一个新的或者更新一个已经存在的资源.
1.3 RESTFul web services
一个REST风格的web服务也就是基于一个HTTP方法和REST概念的方法.一般将会给这个服务定义一个基本的URI,还有MIME类型(支持xml,json,user-defined,…)还有就是所要采用的方法类型.
1.4 Java,REST和Jersey
java通过JAX-RS(The Java API for RESTful Web Services)来通过了标准的REST支持.它通过使用注解(annotations)来定义相关的类.
通过在web.xml中注册由Jersey提供的servlet,同时定义rest工程的路径,servlet的基本的URL是这样的:
http://your_domain:port/display-name/url-pattern/path_from_rest_class
这个servlet会分析过来的http请求,然后选择合适的类和方法来响应这个请求,选择的依据就是类和方法各自添加的注解.
在JAX-RS中最常见的注解是:
注解 | 描述 |
---|---|
@PATH(your_path) | Sets the path to base URL + /your_path. The base URL is based on your application name, the servlet and the URL pattern from the web.xml” configuration file. |
@POST | Indicates that the following method will answer to a HTTP POST request |
@GET | Indicates that the following method will answer to a HTTP GET request |
@PUT | Indicates that the following method will answer to a HTTP PUT request |
@DELETE | Indicates that the following method will answer to a HTTP DELETE request |
@Produces( MediaType.TEXT_PLAIN [, more-types ] ) | @Produces defines which MIME type is delivered by a method annotated with @GET. In the example text (“text/plain” ) is produced. Other examples would be “application/xml” or “application/json”. |
@Consumes( type [, more-types ] ) | @Consumes defines which MIME type is consumed by this method. |
@PathParam | Used to inject values from the URL into a method parameter. This way you inject for example the ID of a resource into the method to get the correct object. |
一个完整的路径来获取资源就是由基本URL加上在对应的类上@PATH注解中的路径.
http://your_domain:port/display-name/url-pattern/path_from_rest_class
Jersey就是这个的规范的参考实现.Jersey包括基本的REST服务端和客户端.核心的客户端能够提供测试以及用来和服务端通信的库. 一个REST的web程序是由数据类和服务构成的,这两个部分一般都是分开在两个包下存放.jersey的servlet是通过web.xml来找到对应的数据类.