首页 > 代码库 > REST|RESTful初步认识
REST|RESTful初步认识
工作中要用到jersey来实现restful风格的webservice。对于webservice还有一定的认知(可以认为是一种服务,远程调用的组件),但是对于restful笔者根本就木有了解过,restful到底是什么,是一种技术?规范?于是笔者花了些时间查询了下资料,看了下书,总算有点眉目了。
什么是REST
REST(REresentation State Transfer:表象化状态转变)描述了一个架构样式的网络系统,它是一种架构风格、设计风格而不是标准、技术,仅仅只是提供了一组设计原则和约束条件(而且并不强制)。Restful式的架构主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。现在来说,REST/RESTful都是指的RESTful Web Service。
REST标准
REST是面向资源的架构风格,通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。在你的应用系统管理之下的任何事物都将被认为是一个资源(resource),每个资源必须至少有一个URI(尽量少且具有实际意义)。
- 资源是有URI来指定的(客户端也是通过URI来访问的)。
- 对资源的操作包括获取、创建、修改、删除等操作,而这些操作正好对应HTTP协议提供的GET、POST、PUT、DELETE方法。
- 通过操作资源的表现形式来操作w资源。
- 资源的表现形式则是XML或者HTML。
REST的要求
对于实际的web架构如果要实现RESTful风格,有以下4点要求:
- 具有客户端和服务器结构
- 连接协议具有无状态性。
- 能够利用Cache机制增进性能
- 层次化的系统。
RESTful最重要的原则是:客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必须的信息。这样服务器端在请求期间重启,客户端不会得到通知,且无状态请求可以由任何可用服务进行回答,客户端可以缓存数据以改进性能。
层次化的系统表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在但各层,可以限制整个系统的复杂性,促进了底层的独立性。
应该注意区别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以降低对HTTP连接的重复请求资源消耗。
含状态传输的web服务也称为RESTful web api是一个使用HTTP并遵循REST原则的Web服务(JAX-RS规范定义了java对RESTful Web Service的实现,sun的jersey框架则是多JAX-RS的一个实现,jersey也是后续要学习的)。
RESTful web api从以下三个方面资源进行定义:
- 直观剪短的资源地址:URI,例如:http://XXX.com/resources。
- 传输的资源:Web服务器接受与返回的互联网媒体类型:JSON、XML、TEXT等。
- 对资源的操作:Web服务在该资源上所支持的一系列请求方法(PUT POST GET DELETE)
REST优点
1、可更高效利用缓存来提高响应速度。
2、无状态性可以让不同服务器的处理一些列请求中的不同请求,提供服务器的扩展性。
3、浏览器即可作为客户端,简化软件需求。
4、相对于其他叠加在HTTP协议之上的机智,REST的软件依赖性更小
5、不需要额外的资源发现机制。
REST|RESTful初步认识