一、什么是rest?而什么又是rest的web服务?
rest( State ,表述性状态转移)是一种跨平台的架构风格,不是一种新的技术,也不是一个标准。而常常提及的rest的web服务,是rest作为在web领域的一种实现方式。例如:简约是一种设计风格,而metro就是简约风作为在PC领域的展现。可能这个例子不太合适,但不难理解应该能说明这个问题。常说的JAX-RS标准则是java项目在实现rest风格的标准之一,简单来说就是按照这个JAX-RS标准就可以来取实现一个rest风格服务。而则是其中一个实现了JAX-RS标准的子项目。在胡乱灌了很多的概念之后,到底什么是rest服务?怎么去实现才能是一个rest风格的服务呢?作者Roy 在他的论文里面,提出了对于rest风格服务的几点约束。
客户-服务器(-)
通信发生在客户端和服务器之间,由客户端发起,服务器端响应。
无状态()
所有的状态由客户端来维护,服务器端不维护或保存通信过程中的数据。
缓存(Cache)
在通信过程中的数据能够被可选的中间件缓存,以此来提高web服务性能,更友好的服务体验。
分层系统( )
系统之间应该是分层的,降低层之间的耦合性。
按需编码
这个约束是可选的,在rest服务中支持等Rich 语言。
说了很多,从上面几点来简单总结下rest是为解决web应用在互联网环境中出现的可伸缩性差(如:并发量增高),安全性,幂等性等问题而出现的一种分布式应用架构风格。而满足这些约束的应用程序或架构,就可以称之为。
二、为什么要使用rest?
说了很多,似乎有这么一种赶脚。rest的概念都这么多,为什么要抛弃之前已经相对成熟的soap(简单对象访问协议)?在这之前有必要去了解一下其他几个概念,URI,资源,统一接口标准这样些概念。
1.资源
这个概念让我想起在初次接触OO(面向对象)编程时的场景。在web中的应用中的服务器上的文档、数据、表、甚至于一条数据都可以被抽象成一个资源。具体到什么程度,只要开发者能够理解并实现就可以。只要你的想象力足够,天空才是你的极限。
2.uri( )
统一资源标识符,用来标识存在于web应用或者本地的资源。
3.UI( )
统一接口,在rest风格中,使用标准的 HTTP 方法 (GET/PUT/POST/) 来抽象所有 Web 系统的服务。对于一个资源来讲,这种简单明了的设计一下子解放了开发者的负担。无论是客户端和服务器端,在编程上就更加的明了减少了开发的难度。这种简单对应CRUD的操作,对于一个资源来讲显然是足以了。当然在现实生产中远远比这来的更加凶猛,这也导致了一些rest设计时出现的一些限制或者出现一些不伦不类的架构设计。既不是rest,也非soap。
4.rest和soap
首先来讲rest和soap都是用来实现企业内部来暴露内部API的一种方式。从rest和soap的风格上来说,rest更强调把内部的资源暴露,并提供简单明了的API(PUT,,GET, POST)来简化操作。而soap更贴近于RPC的实现方式,强调动作操作来暴露内部API。例如:,我们会经常看到这样的接口设计。另外,soap在交互过程中,使用的为XML的方式来进行接口的描述和的定义。而rest除了xml之外,也支持json、html的方式。
5.rest如何实现?
如今实现rest除了上面说的,还有一些厂商基于了JAX-RS标准的实现。比较为大家所熟知的有JBoss社区的和的CXF。上面说过JAX-RS标准只是作为实现rest风格的一种方式,而比较火热的 MVC 则是区别于、的另一种rest实现。
三、写在后面
综上。并不是说rest就一定是优于soap的一种实现,因为根据相对论来说,任何事物都不是放之四海而皆准的。简单来说,rest更贴近于以资源来定义应用的架构。更加轻便和高效是rest的特点,而soap在面对更多的业务逻辑复杂的接口设计中更加有优势。如果一味的追逐rest风格,只会本末倒置、适得其反。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666