JAVA的WebService规范JAX-RS

REST是一种软件架构模式,只是一种风格,不是像SOAP那样本身承载着一种消息协议,(两种风格的web服务均采用HTTP做传输协议是因为HTTP协议能穿越防火墙,JAVA的远程调用RMI等是重量级协议,不能穿越防火墙),因此你也可以叫做REST是基于HTTP协议的软件架构。REST中重要的两个概念就是资源定位和资源操作,而HTTP协议恰好完整的提供了这两个要点,HTTP协议中的URI可以完成资源定位,GETPOSTOPTION等方法可以完成资源操作,因此REST完全依赖HTTP协议就可以完成Web服务,而不像SOAP协议那样只利用HTTP的传输特性,定位与操作由SOAP协议自身完成,也正是由于SOAP消息的存在,使得SOAP笨重。你也可以说REST充分利用了HTTP协议的特性,而不是像SOAP那样只利用了其传输这一特性(事实上大多数人提到HTTP协议就只会想到他能用于数据传输)。

REST对于HTTP的利用分为以下两种:首先是资源定位,这就是URI,这本身没有什么特别的,但要注意RESTHTTP的资源定位理解更加到位,也就是你的Web服务的URI要能足够表意,例如http://www.fetion.com.cn/fetionwap/baby/getBabyInfoById?id=1,URI上可以看出这个Web服务定位到的资源是查询飞信WAP宠物的信息,依据参数id值查询。那么可以继续出现以下层级:

http://www.fetion.com.cn/fetionwap/baby/storeroom/getStoreRoomById?id=1

http://www.fetion.com.cn/fetionwap/baby/storeroom/chicken/getCounts?id=1

我们看到REST风格的URI的目录层级足够表意,也就是资源定位,这种定位要求URI是唯一的。因为REST流行于互联网,网上的资源应该有唯一的资源位置(如:如片、视频)。当然,如果你的服务越复杂,URI可能就越长,越难理解,这也算是REST风格的缺点。第二种就是利用HTTPGETPOSTPUTDELETE四种操作外加HEAD请求报头完成资源操作,有这几种最简单的操作任意组合就可以完成各种各样的复杂操作,当然这是REST的理念,事实上这样创建应用有点牵强。

REST是一种软件架构理念,现在被移植到Web服务上(因此不要提到REST就马上想到WebServiceJAX-RS只是将REST涉及风格应用到Web服务开发),那么在开发Web服务上,偏于面向资源的服务只适用于REST,偏于面向活动的服务。另外,REST简单易用,效率高,SOAP成熟度较高,安全性好。

 

REST提供的网络服务叫做OpenAPI,它不仅把HTTP作为传输协议,也作为处理数据的工具,可以说对HTTP协议做了较好的诠释,充分体现了HTTP技术的网络能力。目前GoogleAmazon、淘宝都有基于RESTOpenAPI提供调用。

JAX-RS的API在javax.ws.rs.*包中,其中大部分也是注解。

我们先看一个较为简单的实例:

(1)IStudentServie.java:

package com.nantian.rest.server;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

@Path(value = "/student/{id}")
@Produces("application/xml")
public interface IStudentService {
	@GET
	@Path(value = "/info")
	Student getStudent(@PathParam("id") long id, @QueryParam("name") String name);

	@GET
	@Path(value = "/info2")
	Student getStudent(@QueryParam("name") String name);
}

 

猜你喜欢

转载自liguangqinlong.iteye.com/blog/2344318