REST
2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。
REST 中最重要的概念是资源(resources)
,使用全球 ID(通常使用 URI)标识。客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE
)操作资源或资源集。RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务。通常,RESTful Web 服务应该定义以下方面:
- Web 服务的基/根 URI,比如 http://host/<appcontext>/resources。
- 支持 MIME 类型的响应数据,包括 JSON/XML/ATOM 等等。
- 服务支持的操作集合(例如
POST、GET、PUT
或 DELETE)
如下表所示:
方法/资源
|
资源集合, URI 如: http://host/<appctx>/resources
|
成员资源,URI 如:
http://host/<appctx>/resources/1234 |
GET
|
列出资源集合的所有成员 |
检索标识为 1234 的资源的表示形式。 |
PUT |
使用一个集合更新(替换)另一个集合。 |
更新标记为 1234 的数字资源。 |
POST |
在集合中创建数字资源 |
在下面创建一个子资源。 |
DELETE |
删除整个资源集合。 |
删除标记为 1234 的数字资源。 |
JSR-311 Java API for RESTful Web Services (JAX-RS) 1.0 and 1.1
JAX-RS是将在JavaEE 6引起的一种新技术。 JAX-RS即Java API for RESTful Web Services,是一个Java
编程语言的应用程序接口
,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了Java
SE5引入的Java标注来简化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。
Jersey 实现
Jersey 是 JAX-RS 的参考实现,它包含三个主要部分。
- 核心服务器(Core Server):通过提供 JSR 311 中标准化的注释和 API 标准化,您可以用直观的方式开发 RESTful Web 服务。
- 核心客户端(Core Client):Jersey 客户端 API 帮助您与 REST 服务轻松通信。
- 集成(Integration):Jersey 还提供可以轻松集成 Spring、Guice、Apache Abdera 的库。
用微账户的查询接口作一个例子
@Path("/accinfo")
public class AccountInfoResource {
@Context
UriInfo uriInfo;
@Context
Request request;
/*
* Get all accounts info
*/
@GET
@Path("all")
@Produces(MediaType.APPLICATION_XML)
public List<AccountInfo> getAllaccounts() throws UnsupportedEncodingException{
List<AccountInfo> retList = new ArrayList<AccountInfo>();
EntityManager em = EntityManagerHelper.getEntityManager();
MaaccdtapManager mm = new MaaccdtapManager(em);
List<Maaccdtap> mList = mm.getAllAccounts();
AccountInfo ai = null;
AccountAdapter ad = new AccountAdapter();
for(Maaccdtap m : mList){
ai = ad.getAccountInfo(m);
retList.add(ai);
}
EntityManagerHelper.closeEntityManager();
return retList;
}
/*
* Get account info by mbrseq id
*/
@GET
@Path("{accountid}")
@Produces(MediaType.APPLICATION_XML)
public AccountInfo getAccountBySid(@PathParam("accountid") String accountid)
throws UnsupportedEncodingException{
EntityManager em = EntityManagerHelper.getEntityManager();
MaaccdtapManager mm = new MaaccdtapManager(em);
Maaccdtap mp = mm.getAccountBySid(accountid);
AccountInfo ai = null;
if(null != mp){
AccountAdapter ad = new AccountAdapter();
ai = ad.getAccountInfo(mp);
}
EntityManagerHelper.closeEntityManager();
return ai;
}
@POST
@Path("change")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void responseAccountChange(
@FormParam(value = "id") String id,
@FormParam(value = "name") String name,
@Context HttpServletResponse servletResponse) throws IOException{
System.out.println("Reveiced change parameters from UI:");
System.out.println("ID is " + id);
System.out.println("Name is " + name);
URI newUrl = uriInfo.getAbsolutePathBuilder().path(id).build();
System.out.println(newUrl.toString());
Response.created(newUrl).build();
//ServletOutputStream os = servletResponse.getOutputStream();
PrintWriter pw = servletResponse.getWriter();
pw.write("The change request has been sent to backend and id is " + id);
pw.flush();
}
}
用下面的URL即可访问相应的账户信息(即Resource)
http://ip:port/MicroAcc/rest/accinfo/{mbrseq}
http://ip:port/MicroAcc/rest/accinfo/al
l
@Produces(MediaType.APPLICATION_JSON)则可以产生Json的输出。
@POST注释会接收http post request, 将Web表单里的action指向POST的地址,例如:
http://ip:port/MicroAcc/rest/accinfo/change
被注释的方法即可收到表单的内容。
Jersey配置:
Jersey 1.2 以后的版本和一些Update的维护版本只支持Java SE 6, 在选择版本和相应服务器时需要注意。
从 Jersey 开发包中以下的库为必须:
- 核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar
- JAXB 支持:jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar
- JSON 支持:jersey-json.jar
Web.xml:
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>sh.cmbchina.pension.resources</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
这样,所有在包sh.cmbchina.pension.resources下面的resource类都会被注册为Restful url的响应处理类。
分享到:
相关推荐
使用SpringBoot整合jersey 实现Restful web service.同时整合springmvc。
Build a RESTful Web service using Jersey and Apache Tomcat document.
This book provides a comprehensive introduction to Jersey framework (an implementation of JAX-RS specification) as the application development framework for RESTFul web service development. This book ...
RESTful Java Web Services (2009).pdf This book is for developers who want to code RESTful web services using the Java technology stack together with any of the frameworks Jersey's JAX-RS, Restlet's ...
RESTful webservices – Client API in Java - Jersey
Restful Jersey webservice:包括Jersey实现的Restful webservice工程,这是一个比较实用的实例项目,在Tomcat中能实际正常运行起来。
本文将介绍如何使用Spring创建Java实现的服务器端RESTful Web Services。这个例子将使用浏览器、curl和Firefox插件RESTClient作为发出请求的客户端。 本文假定您是熟悉REST基本知识的。 Spring 3的REST支持 ...
RESTful Web Service DemoS with Jersey,Hibernate,Mysql,Spring,JQuery,AngularJS ...跟随我创建一个完整的Web应用程序。 随便去吧! 这是有关如何逐步构建项目的文章,每个演示都是一个小项目: 1.用泽西...
包含了广工soa和webservice的四次实验源代码以及四次实验的报告,如创建Web Service,编写Web Service的客户端程序,对SOAP消息包的操作,基于Jersey框架创建RESTful服务端和客户端
restful web services参考实现之Jersey开发指南,由jersey官网提供。
jersey-server-2.17包 可用于restful web Service服务的开发
这是一个非常简单的 RESTful Web 服务,使用 Jersey 实现,它接收 JSON 输入并将其回显到响应中。 本项目需要以下 jar 文件: asm-3.3.1.jar jersey-bundle-1.14.jar json.jar
Jersey实现Restful Web Service 必备JAR 包
资源名称:Java RESTful Web Service实战内容简介:国内首本完整地、深度地讲解如何基于Java标准规范实现REST风格的Web服务的专著,阿里巴巴资深Java技术专家近10年开发经验结晶,3位业内著名技术专家联袂推荐!...
介绍了使用jersey集成spring与hibernate实现的restful开发
Spring Boot RESTful Web服务示例该示例项目的主要目的是演示Spring Boot的功能。 但此外,我想展示在使用Spring Boot的开发过程中可能发生的具有挑战性的问题。 第一个目标是展示如何使用嵌入式tomcat和嵌入式H2...
发布Restful web service,可以利用这个工具包。简单易用。
Restful风格的WebService正在渐渐取代传统的SOAP, Java 也有很多Restful的框架,很方便简洁,Jersey,restlet,甚至SpringMVC也可以,不得不说Rest让人从Web转型到WebService更容易和方便,当然深入Restful的理论...
web Services jersey-quickstart-webapp vscode安装插件 Maven for Java和Tomcat for Java 执行mvn clean package将项目打包后,在 target 目录中会生成 .war 文件 (base) hzz@hzz:~/Desktop/github/caucoder/...