1.1.3 REST风格的Web服务
REST-表述性状态转移(Representational State Transfer)是Roy Fielding博士在2000年他的博士论文《基于网络软件体系结构的构架风格与设计》中提出来的概念,它是一种软件架构风格。采用REST架构风格的Web服务相比复杂的SOAP服务更加简洁、易用。
REST强调从资源的角度来观察整个网络,基于REST的架构是一种面向资源的架构(Resource-Oriented Architecture,ROA)。资源可以是具体的数据,也可以是能够实现某些功能的服务,资源通常由URI(Uniform Resource Identifier,统一资源标识符)唯一标识,客户端的应用通过URI来获取资源的表述,获得这些表述致使客户端应用程序转变了状态,即,表述性的状态转变。
REST架构风格的Web服务逐渐被越来越多的人认可,更多的网站提供REST风格的Web服务,也有更多的开发者愿意使用REST服务来构建应用系统,究竟REST服务哪些特点吸引各种应用者的目光呢?
在REST服务中,所有的资源操作都是基于统一的方式进行的:
- 所有的业务全部抽象为资源对外发布,并且对资源的定位通过唯一的资源标识符-URI来标识。
- 客户端不直接操作服务器端的资源,而是将相应操作的描述通过HTTP协议发送给URI,由服务器端处理资源并返回结果。
- 客户端和服务器端传送的任何一个请求都是自描述的,即处理这个请求所需要的上下文环境都应该包含在这个请求体当中。
- REST服务是基于HTTP协议的,任何对资源的操作行为都是通过HTTP协议来实现,对资源的CRUD(Create, Retrieve,Update,Delete)操作可以分别通过HTTP协议的POST、GET、PUT、DELETE四个动作完成。
- 资源的响应内容的格式丰富,灵活。资源完成操作后,可以返回给客户端不同的格式的结果,即可以返回给客户端HTML,也可以返回给XML,也可以返回给PNG,这依赖于客户端想要什么。
REST服务是无状态的,服务器不会保存任何与客户端的会话状态信息,因此从客户到服务器的每个请求都必须包含理解该请求所必需的所有信息,所有的状态信息只能放在双方沟通的Message(消息)中。
REST服务具有幂等性,对于相同的请求,服务器返回的结果也是相同的,因此服务器端返回的结果是可以缓存的,可以利用缓存Cache来提高响应速度。缓存既可以存在客户端也可以存在代理服务器端。
REST服务具有分层结构。在REST服务的客户端与资源之间加入了Proxy层和Gateway层。在这些中间层可以加入一些业务处理以外的功能,譬如:负载均衡,安全控制等等。
让系统设计更简单。REST风格的开发方式,会使系统结构更加清晰,而且容易维护。
相对于其他叠加在HTTP协议之上的机制,REST服务对软件依赖性更小。
SuperMap iServer将REST服务带来的诸多优势引入到GIS服务中,严格遵循REST设计准则,同时兼顾功能丰富、开发简单易用、操作灵活、平台扩展性强的原则,开发出专门针对GIS的REST服务,为GIS服务的需求者、GIS服务的供应商、GIS服务管理者提供更加简单、开放、灵活的解决方案。
SuperMap iServer REST服务特点
- 严格遵循面向资源的架构设计,真正RESTful的服务。
SuperMap iServer的REST服务严格遵循ROA(面向资源的架构)设计,GIS的各种功能都以资源的形式进行发布,而且任何对资源的操作行为都是通过HTTP协议来实现,即HTTP把对一个资源的操作限制在4个方法以内:GET,POST,PUT和DELETE,这正是对资源CRUD(Create,Retrieve,Update,Delete)操作的实现。SuperMap iServer REST服务是一个真正RESTful的服务,它继承REST所有的优势,为使用者提供简单的操作方式。使用者了解REST服务的资源后,可以通过REST统一的操作方式对所有的资源进行操作。例如,SuperMap iServer提供map资源表示一个地图,下面URI为World Map地图的资源地址:http://localhost:8090/iserver/services/map-world/rest/maps/World,通过map资源可以获得该地图的基本状态信息,如中心点,比例尺,地图范围,图片大小,地图单位,包含的图层,包含的图片等等。通过PUT方法可以对该地图资源执行修改地图信息的操作,如修改地图中心点,修改比例尺,修改图片大小等。
- 提供丰富的响应码,便于开发者判断操作结果的信息。
REST服务与客户端是一个交互的过程,客户端提出请求,需要REST服务进行响应,客户端根据响应判断操作情况,以便后续的处理。为了方便客户端能够详尽的判断响应结果,SuperMap iServer REST服务提供了丰富的响应码,将客户端到REST服务器这样的一个交互过程中,可能出现的问题映射到不同的响应码中,如401表示因为安全的原因,导致对资源的操作没有完成。客户端通过获取这些响应码,可以判断请求的操作是否成功,如果不成功问题出现在哪里。
- 各种REST服务之间松耦合,确保系统可重用性。
SuperMap iServer将所有GIS功能抽象为REST服务的资源,这些资源都具有相对独立性,通过通用的链接器接口对资源进行操作,这样保证各类REST服务都是解耦的,改善系统可重用性。
- REST服务支持多种中间件。
REST服务作为独立应用程序发布,它可以被部署到各种中间件中,如RESTlet、中间件(Tomcat,JBoss,Weblogic等)、Tuscany。同时REST服务可以不依赖任何中间件,直接通过SuperMap iServer发布。服务供应商可以根据自身特点灵活选择。
- 开放的结构,灵活的扩展能力。
SuperMap iServer不仅提供各类GIS功能的REST服务,还提供SuperMap iServer REST SDK。开发商可以利用REST SDK对资源、安全、表述等进行扩展,SuperMap iServer开放的REST服务结构允许向服务中加入自定义的资源、安全控制器,响应表述器等。
- 简单、易操作的服务配置方式。
SuperMap iServer提供可视化服务配置工具–iServerManager,该工具提供服务配置向导,用户根据向导可以轻松实现对GIS服务的定制。利用该工具,可以创建、修改、删除GIS服务,集群服务,可以控制服务的启动与停止。
总的来说,REST服务是一种以非常简单、轻量级的方式实现服务与客户端之间真正互操作,服务需求者可以很容易地掌握如何使用REST服务,并且在某种程度上,REST风格的GIS服务简化了二次开发者构建应用系统的工作量。对于服务提供者来说,SuperMap iServer提供简单、方便的创建和发布资源的方式,还提供灵活自由的服务扩展机制以及REST服务的SDK,是服务提供者构建Service GIS服务的最佳选择之一。