REST(一)REST和JAX-RS

最近重新整理了一下代码,把java实现REST api的几种框架和方法记录下来。

[b]1.什么是REST[/b]
Representational state transfer (REST) Web Service:
它是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。在目前三种主流的Web Service实现方案中,因为REST与SOAP和XML-RPC相比显的更加简洁,因此越来越多的Web Service开始采用REST风格设计和实现。
REST 描述了一个架构样式的互联系统(如 Web 应用程序)。REST 约束条件作为一个整体应用时,将生成一个简单、可扩展、有效、安全、可靠的架构。由于它简便、轻量级以及通过 HTTP 直接传输数据的特性,RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案。用于 web 服务和动态 Web 应用程序的多层架构可以实现可重用性、简单性、可扩展性和组件可响应性的清晰分离。开发人员可以轻松使用 Ajax 和 RESTful Web 服务一起创建丰富的界面。
RESTful的关键是定义可表示流程元素/资源的对象。在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的。

一些关于REST的资料如下:
[url=https://www.oschina.net/translate/what-does-restful-really-mean]RESTful 真正意味着什么?[/url]

[b]2.JAX-RS[/b]
JAX-RS是JAVA EE6 引入的一个新技术(JSR311: JAX-RS: The Java API for RESTful Web Services)。 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。
基于java开发的REST框架基本都遵循JAX-RS规范,支持注解方式声明REST。

[b]3.API设计[/b]
Restful样式的接口将功能抽象为资源resource路径映射,以HTTP GET /resource/{id} 的方式访问。主要分为以下几类接口:
[table]
|[b]地址[/b]|[b]请求方法[/b]|[b]说明[/b]|
|/resource[color=red]s[/color]|GET|获取所有资源|
|/resource[color=red]s[/color]|POST|创建新资源,content中包含资源内容|
|/resource/{id}|GET|获取编号为id的资源|
|/resource/{id}|PUT|更新编号为id的资源,content中包含资源内容|
|/resource/{id}|DELETE|删除编号为id的资源|
[/table]
{id}称为路径变量,告诉restful你要对哪个资源进行查、改、删。
接口一般返回json/xml格式数据,方便服务端程序、浏览器脚本调用接口并处理返回数据。
具体设计时需要注意很多细节,可参考以下资料:
[url=http://www.ruanyifeng.com/blog/2014/05/restful_api.html]RESTful API 设计指南[/url]
[url=http://www.csdn.net/article/2013-06-13/2815744-RESTful-API]RESTful API 设计最佳实践[/url]

4.实现框架
基于java的常用开源REST框架有以下几种:
[list]
[*]Spring MVC
[*]Jersey
[*]RESTEasy
[*]Restlet
[*]Apache CXF
[/list]
见 [url=https://stackoverflow.com/questions/29186444/spring-rest-ws-jersey-vs-resteasy-vs-restlet-vs-apache-cxf-vs-spring-ws]Spring REST WS : jersey vs resteasy vs restlet vs apache cxf vs Spring WS[/url]
各框架都支持JAX-RS注解。后面将分节介绍各种框架实现细节。

[b]5.Spring MVC实现REST[/b]
基于spring4+springmvc实现REST的示例,见springmvc系列[url=http://sb33060418.iteye.com/blog/2375493]spring mvc(六)实现REST接口GET/POST/PUT/DELETE[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值