[置顶] 谈谈到底什么是rest风格架构设计?
2015-10-08 23:13
666 查看
一、什么是rest?而什么又是rest的web服务?
rest(Representational State Transfer,表述性状态转移)是一种跨平台的架构风格,不是一种新的技术,也不是一个标准。而常常提及的rest的web服务,是rest作为在web领域的一种实现方式。例如:简约是一种设计风格,而metro就是简约风作为在PC领域的展现。可能这个例子不太合适,但不难理解应该能说明这个问题。常说的JAX-RS标准则是java项目在实现rest风格的标准之一,简单来说就是按照这个JAX-RS标准就可以来取实现一个rest风格服务。而Jersey则是GlassFish其中一个实现了JAX-RS标准的子项目。在胡乱灌了很多的概念之后,到底什么是rest服务?怎么去实现才能是一个rest风格的服务呢?作者Roy Thomas Fieding在他的论文里面,提出了对于rest风格服务的几点约束。客户-服务器(Client-Server)
通信发生在客户端和服务器之间,由客户端发起,服务器端响应。
无状态(Stateless)
所有的状态由客户端来维护,服务器端不维护或保存通信过程中的数据。
缓存(Cache)
在通信过程中的数据能够被可选的中间件缓存,以此来提高web服务性能,更友好的服务体验。
分层系统(Layered System)
系统之间应该是分层的,降低层之间的耦合性。
按需编码
这个约束是可选的,在rest服务中支持JavaScript等Rich client语言。
说了很多,从上面几点来简单总结下rest是为解决web应用在互联网环境中出现的可伸缩性差(如:并发量增高),安全性,幂等性等问题而出现的一种分布式应用架构风格。而满足这些约束的应用程序或架构,就可以称之为restful。
二、为什么要使用rest?
说了很多,似乎有这么一种赶脚。rest的概念都这么多,为什么要抛弃之前已经相对成熟的soap(简单对象访问协议)?在这之前有必要去了解一下其他几个概念,URI,资源,统一接口标准这样些概念。1.资源
这个概念让我想起在初次接触OO(面向对象)编程时的场景。在web中的应用中的服务器上的文档、数据、表、甚至于一条数据都可以被抽象成一个资源。具体到什么程度,只要开发者能够理解并实现就可以。只要你的想象力足够,天空才是你的极限。2.uri(Uniform Resource Identifier)
统一资源标识符,用来标识存在于web应用或者本地的资源。3.UI(uniform Interface)
统一接口,在rest风格中,使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 来抽象所有 Web 系统的服务。对于一个资源来讲,这种简单明了的设计一下子解放了开发者的负担。无论是客户端和服务器端,在编程上就更加的明了减少了开发的难度。这种简单对应CRUD的操作,对于一个资源来讲显然是足以了。当然在现实生产中远远比这来的更加凶猛,这也导致了一些rest设计时出现的一些限制或者出现一些不伦不类的架构设计。既不是rest,也非soap。4.rest和soap
首先来讲rest和soap都是用来实现企业内部webservices来暴露内部API的一种方式。从rest和soap的风格上来说,rest更强调把内部的资源暴露,并提供简单明了的API(PUT,DELETE,GET, POST)来简化操作。而soap更贴近于RPC的实现方式,强调动作操作来暴露内部API。例如:getUserInfoByUserId,我们会经常看到这样的接口设计。另外,soap在交互过程中,使用的为XML的方式来进行接口的描述和response的定义。而rest除了xml之外,也支持json、html的方式。5.rest如何实现?
如今实现rest除了上面说的Jersey,还有一些厂商基于了JAX-RS标准的实现。比较为大家所熟知的有JBoss社区的RestEasy和Apache的CXF。上面说过JAX-RS标准只是作为实现rest风格的一种方式,而比较火热的Spring MVC 则是区别于Jersey、RestEasy的另一种rest实现。三、写在后面
综上。并不是说rest就一定是优于soap的一种webservices实现,因为根据相对论来说,任何事物都不是放之四海而皆准的。简单来说,rest更贴近于以资源来定义应用的架构。更加轻便和高效是rest的特点,而soap在面对更多的业务逻辑复杂的接口设计中更加有优势。如果一味的追逐rest风格,只会本末倒置、适得其反。参考资料:
理解本真的rest架构风格
rest服务开发实践
浅谈SOAP
星巴克rest案例分析
Style of WebService: REST vs. SOAP
Web 服务编程,REST 与 SOAP
相关文章推荐
- 102-整合log4j和flume架构
- 优设 - 一个前端设计相关网站
- 一个简单的网站访问过程
- Linux内核工程导论——内核架构概览
- 高并发网站架构设计方案
- 福利!在线编写代码的网站
- 网站
- 多语言网站框架实践问题(实体数据模型问题未解决)
- ab测试网站吞吐率介绍
- Java 集合系列09之 Map架构
- Java 集合系列02之 Collection架构
- 自适应网站前途星辰大海
- java学习——架构的设计是项目的核心
- 大型网站架构与分布式架构
- 分布式发布订阅消息系统 Kafka 架构设计
- opencv日文网站
- 主题下载网站
- 一个小网站的架构演变案例
- 优酷、YouTube、Twitter及JustinTV几个视频网站的架构
- Android开发时遇到问题比较实用的工具和网站