服务式GIS实践与发展——REST 服务

文:研发中心  辛宇 胡中南
  发布时间:2010-1-29 【 字体设置:大 中 小 】 打印本页  

前言
      一个资源、一个URI、一个HTTP方法轻松获取一个响应结果,无需复杂的开发代码,甚至某些服务可以直接通过在浏览器的地址栏输入URI即可获取,这就是REST服务。
      REST——表述性状态转移(Representational State Transfer)是Roy Fielding博士在2000年提出来的一种软件架构风格,采用REST架构风格的Web服务相比复杂的SOAP服务更加简洁、易用,这一特点为它带来了越来越多的“支持者”。在SOA盛行的时期,Web服务成为实现SOA架构的一个优秀的技术,而REST服务以其简单、轻量级的优势更成为构建Web服务的主要风格之一。在GIS界,SuperMap iServer将REST软件架构风格引入Service GIS平台中,根据这一风格构建出服务于GIS的SuperMap iServer REST服务(以下简称REST 服务)。
      本文将分别从REST服务内容、体系结构、REST服务特点及应用为大家揭开SuperMap iServer REST服务的面纱。

SuperMap iServer REST服务内容及浏览
      SuperMap iServer REST服务将GIS功能抽象为资源,并通过URI对该资源进行标识,客户端通过HTTP的标准方法以及资源的URI去访问REST服务的资源,从而实现对GIS数据的CRUD(Create,Retrieve,Update,Delete)的操作。

图1  SuperMap iServer REST服务内容

◆REST服务内容
      由于GIS功能非常丰富,为了便于用户快速获取所需内容,SuperMap iServer 将GIS功能进行分类,并把每一类GIS封装为一套REST类型的GIS服务,如图1,包括地图REST服务、数据REST服务,、空间分析REST服务、三维REST服务。这些REST服务分别完成各自特定的GIS功能,用户可以根据自身的功能需求确定需要哪种REST服务。
      ◆浏览REST服务
      使用REST服务首先要了解REST提供哪些资源,这些资源用于实现哪些GIS功能。在SuperMap iServer的REST服务中,可以直接在浏览器中浏览REST服务目录、服务内容与支持的操作和表述类型,可以快速了解发布的REST服务内容,获取适合自身需求的资源服务。
      ◇获取REST服务目录
SuperMap iServer将REST服务的各种资源按照一定的层次结构组织和发布,如图2所示,地图REST服务、数据REST服务、空间分析REST服务以及三维REST服务都作为root资源的子资源。通过对root资源的GET操作,可以获取所有发布的REST服务的目录。

图2  资源层次结构示意图

SuperMap iServer将REST服务目录的HTML表述进行了深度加工,使得用户通过浏览器就可以快速的查阅发布的REST服务的目录、各种算法资源的计算信息、相关参数,甚至是直接在web浏览器中进行交互式的REST资源操作。图3是通过REST服务目录的层层链接最终获取到world地图图片的页面(image资源GET方法),在这个HTML表述的页面中,可以通过互操作获取任意范围的地图图片。

图3  image资源互操作页面

◇操作rest资源
      SuperMap iServer 发布的REST服务严格遵循面向资源的架构约束,所有GIS功能都抽象为各种类型的资源,对GIS数据的操作就体现为对资源的操作。在REST服务中任何对资源的操作行为都是通过HTTP协议来实现,获取资源的表述用GET方法,修改资源用PUT,添加资源用POST 或者PUT,删除资源用DELETE。REST资源还支持 HEAD 操作,用于返回消息头,得到资源的元数据,比如是否可访问、是否支持某种表述格式等。
      ◇资源响应码
      客户端向SuperMap iServer服务器发送 HTTP 请求时,SuperMap iServer服务器会根据请求的类型返回响应结果,通过获取响应结果中的响应码,客户端可以得知请求的处理情况。HTTP 协议定义了各个响应码代表的意义,官方定义有41种响应码,SuperMap iServer主要用到其中的2xx 系列、4xx 系列和5xx 系列。如响应码200,表示服务器成功执行了客户端的 HTTP 请求;响应码400表示客户端的请求参数不合法或没有表达足够的信息。
      ◇输出格式
      REST服务对客户端 HTTP 请求做出响应通常以各种格式的表述返回给客户端。如果客户端执行GET 请求,资源将返回对该资源的表述;如果客户端执行 PUT、POST、DELETE 请求,资源将返回操作结果的表述。REST资源支持的表述有多种格式,如HTML、XML、JSON、RJSON、PNG、BMP、GIF、JPG或者JPEG等,其中PNG、BMP、GIF、JPG或者JPEG 是图片资源特有的表述格式。

图4  HTML表述

图5  PNG表述

SuperMap iServer REST服务结构
      SuperMap iServer 的REST服务内部工作主要分为验证、解析HTTP、请求处理以及结果编排返回几个过程,这些过程分别由REST服务内部的认证管理器、资源、参数解析器、资源HTTP处理器、表述生成器完成,客户端向REST服务提交的请求分别经由这些组成部分处理,最终形成处理结果返回给客户端,如图6所示。

图6  REST服务内部组件工作机制

◆资源
      资源是REST服务核心的部分,SuperMap iServer 的REST服务中每一个资源都有唯一的URI地址,用户访问资源的URI,并通过HTTP的五种动作(GET、PUT、POST、DELETE、HEAD)对资源进行操作,来获取各种GIS功能的操作结果。资源作为服务的核心元素,主要负责对HTTP请求内容进行处理。具体工作内容如下:
      ◇对参数对象的内容进行判断,对于非法参数直接返回异常的响应码;
      ◇通过SuperMap iServer 服务内核——GIS组件处理请求内容;
      ◇返回处理结果,包括当前地图状态参数等。
      ◆认证器
      REST服务是基于网络的,任何客户端通过URI都可以访问REST服务的各种类型的资源,甚至有些资源支持客户端对GIS数据进行编辑操作,因此必须在REST服务器端设置安全机制,用于保护GIS数据、保证REST服务不被恶意破坏。
SuperMap iServer REST服务在安全机制环节专门设置了认证器,认证器是客户端请求到达REST服务后首先执行的程序,认证器主要作用是对客户端的身份进行合法性验证,只有通过身份验证的客户端请求才能够与REST服务进行交互,对于非法身份的客户端则将其提交的请求驳回,从而能够有效保证REST服务的安全。
      SuperMap iServer 提供一个默认认证器,默认认证器负责如下工作:
      ◇获取标准身份的列表:
      身份校对的标准被存储在SuperMap iServer 安装目录的lib\iServer.jar的config\rest下password.properties文件中,用户可以向该文件中添加多个可以访问REST服务的合法身份信息,其格式为[用户名]=[密码],例如 “iServer=iServer123!”表示一个名为“iServer”的用户,其密码是“iServer123!”。

图7  默认认证器工作流程

默认认证器通过读取password.properties文件从而获得可以访问REST服务的身份列表。
      ◇解析客户端输入的身份信息:默认认证器解析客户端传入的身份验证的信息。
      ◇进行身份验证:默认认证器将解析的客户端传入的身份信息与1)中身份列表的信息进行对比,如果身份列表中有匹配的用户,那么将该客户端请求转给资源;反之,认证器生成一个响应码用于说明客户端提交的身份不合法,并将响应码返回给客户端。
      ◆参数解析器
      参数解析器是用来解析包含在资源请求中的地图参数,将参数反序列化,转换为参数对象,以便REST服务根据参数对象执行对应的GIS处理。
      例如某客户端对area资源提交GET请求,请求计算地图的面积。这时area资源是需要客户端同时提交必要的计算参数,即提交要量算区域的节点坐标,而且REST服务规定这些必要的计算参数需要包含在资源的URI中,那么对area资源提交GET请求为:
      http://supermapiserver:8090/services/rest/maps/World/area.rjson?point2Ds=[{"x": 23.00,"y":34.00},{"x": 53.55,"y":12.66},{"x": 73.88,"y":12.6}]&unit=METER
      其中point2Ds=[{"x": 23.00,"y":34.00},{"x": 53.55,"y":12.66},{"x": 73.88,"y":12.6}]&unit=METER就是资源计算所需要的参数部分。REST服务端获取到该请求后,参数解析器将URI中相关的计算参数反序列化转换为参数对象,这样REST资源进行GIS处理就可以根据参数对象中的各个属性值来执行操作。
      ◆HTTP处理器
      HTTP处理器是REST资源用于处理HTTP请求的入口与出口。客户端的请求经过认证器的校验后被分配给相应的资源,此时HTTP处理器获取HTTP请求,对HTTP请求进行判读与处理,最后将最终资源表述返回给客户端。该处理器主要为SuperMap iServer 的地图资源、数据资源、空间分析资源以及三维资源提供HTTP请求的处理工作,它主要负责如下工作内容:
      ◇取得客户端HTTP请求;
      ◇判读HTTP请求的资源是否存在:如果HTTP请求的资源不存在,将资源不存在的响应码返回给客户端;
      ◇判读HTTP请求的动作REST资源是否支持:在SuperMap iServer中每个资源都有其能够处理的动作,如果HTTP请求的动作资源无法处理,HTTP处理器会给客户端返回无法处理动作的响应码;
      ◇判断HTTP请求返回的表述类型REST资源是否支持:如果HTTP请求返回的表述类型资源无法支持,那么HTTP处理器会给客户端返回不支持表述类型的响应码;
      ◇调用参数解析器解析HTTP请求的参数,转换为资源需要的参数对象;
      ◇向资源提交参数对象并获取资源处理的结果;
      ◇调用表述生成器,将处理结果生成所需的表述格式;
      ◇将表述返回客户端。
      ◆表述生成器
      表述生成器是将资源的处理结果生成指定类型的表述的一类程序。
      在REST服务模式中,资源将客户端请求的响应结果以表述的形式返回给客户端。客户端执行 GET 请求,将会获得对资源的表述;客户端执行 PUT、POST、DELETE 请求,将获得操作结果的表述。如图8表达 maps 服务的 HTML 表述,图9表达maps服务的XML表述。

图8  maps 服务的 HTML 表述

图9  maps 服务的 XML 表述

SuperMap iServer REST服务的扩展
      SuperMap iServer REST服务提供的GIS功能涵盖范围很广,从基础地图操作到复杂的空间分析甚至到三维服务,客户端可以通过REST服务操作绝大部分GIS功能。但是,SuperMap iServer REST服务并不仅仅局限于提供丰富的GIS服务。作为Service GIS的开发平台,SuperMap iServer 还致力于提供灵活、友好的REST服务框架以及构建REST服务的工具包,在REST服务基础上通过SuperMap iServer 开放式的REST架构和REST开发工具对REST服务进行扩展,从而满足各种行业不同的业务的需求,甚至是将非GIS业务的REST服务整合到SuperMap iServer REST框架中,实现行业统一的REST服务体系。
      ◆灵活可扩展的内部结构
      前文介绍,SuperMap iServer REST服务具有开放、灵活的内部结构,安全层中目前提供一个默认的认证器,保证REST服务和GIS数据的安全;资源实现层中包括参数解析器、HTTP处理器、表述生成器以及资源,实现客户端对GIS请求的响应。各层次的每一个组成元素各自负责相对独立的处理内容,这为REST服务的扩展开发提供了良好的服务框架。例如,为了使REST服务和GIS数据受到根据严格的保护,服务提供商可以做一个权限过滤分配的模块加入到REST服务的安全层中。这样,除了通过认证器检验客户端身份外,还可以通过权限过滤分配赋予不同客户端以不同的操作权限,如哪些身份的客户端仅能做GET处理,哪些身份的客户端能够执行PUT等操作等。
      ◆丰富、易用的开发工具包
      SuperMap iServer REST SDK为REST服务扩展开发提供了强大的开发工具包,包括安全、资源、参数解析、HTTP处理、表述生成等一系列的抽象基类,可以利用REST SDK对资源、安全、表述进行个性化的扩展开发。例如,对于一个REST服务的资源无法满足的特殊的业务需求,可以通过扩展REST资源的方式自定义一个面向该业务的新REST资源;如果该资源所需要的参数是某种特定的规则,还可以通过扩展参数解析器的方式自定义一个专门处理该类资源参数的参数解析器。REST服务提供的表述格式不能满足应用系统需求,可以通过扩展REST SDK提供的表述生成器抽象基类,重构一个特定格式的表述生成器,以特定的组织方式构建GIS计算结果。总之,SuperMap iServer REST SDK提供REST服务中任意层次的扩展基类,为开发者进行REST服务扩展提供丰富、易用的开发工具包。
      ◆简单、快捷的REST服务管理机制
      SuperMap iServer通过对配置文件的操作实现对REST服务的管理。配置文件用于记录REST服务的资源、表述生成器、参数解析器、HTTP处理器、安全认证器等的元数据信息。根据配置文件的元数据,SuperMap iServer 组织发布REST服务。
      管理员可以向配置文件中添加/删除一种资源的元数据信息,如ID、资源类型等,添加/修改该资源使用的表述生成器、参数解析器、HTTP处理器的类名等。无论是REST服务默认提供的资源,还是用户自定义扩展的REST服务内容,都可以通过这种统一的配置方式进行发布操作。

SuperMap iServer 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服务提供了丰富的响应码,将客户端到REST服务器这一交互过程中可能出现的问题映射到不同的响应码中,客户端通过获取这些响应码,可以判断请求的操作是否成功,如果不成功问题出现在哪里。
      ◇各种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 REST服务应用
      ◆直接通过网址获取REST服务
      在HTTP的方法中,仅有GET方法是浏览器默认支持的HTTP方法,通过GET方法客户端可以获取资源的信息描述。因此,如果希望了解REST服务中提供的各种资源目录、各种资源的能力等,可以直接在浏览器的地址栏中输入资源URI。如果希望返回的响应结果以某种固定的格式显示,则可以给URI加上后缀,形如.[format]。例如,在地址栏输入
      http://localhost:8090/services/rest/root.html
      可以看到以HTML格式描述的REST服务目录;
      http://localhost:8090/services/rest/maps/World/image.png
      表明向world地图的image资源执行GET方法,获取world地图图片。
      ◆通过开发语言获取REST服务
      由于REST服务是通过HTTP协议的标准方法进行操作的,因此任何开发语言都可以通过HTTP轻松获取REST服务,如客户端开发语言JavaScript、Flex、Silverlight,服务器端开发语言C#、VB.NET、java等。下面是利用JavaScript 的XMLHttpRequest对象获取REST服务的示例:
      资源URI: http://localhost:8090/services/rest/maps/World
      返回的资源表述格式:JSON
      使用的HTTP方法:GET
      实现功能:获取World地图的基本信息

结语
      总的来说,REST服务是一种以非常简单、轻量级的方式实现服务与客户端之间真正互操作,服务需求者可以很容易地掌握如何使用REST服务。而且在某种程度上,REST风格的GIS服务简化了二次开发者构建应用系统的工作量。对于服务提供者来说,SuperMap iServer 提供简单、方便的创建和发布资源的方式,还提供灵活自由的服务扩展机制以及REST服务的SDK,是服务提供者构建Service GIS服务的最佳选择之一。

服务式GIS实践与发展——REST 服务相关推荐

  1. k8s停止服务_Kubernetes 服务部署最佳实践(二) 如何提高服务可用性

    引言 上一篇 文章我们围绕如何合理利用资源的主题做了一些最佳实践的分享,这一次我们就如何提高服务可用性的主题来展开探讨. 怎样提高我们部署服务的可用性呢?K8S 设计本身就考虑到了各种故障的可能性,并 ...

  2. 一文读懂服务式办公室、共享办公室、联合办公空间、开放式工位的关系

    最近几年,很多企业在找合适的办公室的时候应该都听过"服务式办公室"."共享办公室"."联合办公空间"."开放式工位"这四 ...

  3. 究竟是多牛的微服务深度原理实践进阶PDF,竟让阿里换下了Dubbo

    最近一个粉丝分享了他悲惨的阿里面试故事,好不容易冲进三面,最后凉了! 关键在于微服务部分没回答好. 本人自己说在看到这些面试真题之后人都是懵的,之前这方面也没有很重视,结局就很可惜了. 今天先结合我这 ...

  4. CAP-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) gRPC-微服务间通 ...

  5. 服务式办公室相对于传统办公室有什么不同,服务式办公室的概念

    服务式办公室的概念 什么是服务式办公室呢?服务式办公室基于服务的办公室,换而言之就是主打服务的办公室,也称为即租即用的办公室,是指办公设备齐全的办公室或者办公楼或者独栋办公楼,由专门的服务式办公室运营 ...

  6. 【微服务】微服务安全 - 如何保护您的微服务基础架构?

    在当今行业使用各种软件架构和应用程序的市场中,几乎不可能感觉到您的数据是完全安全的.因此,在使用微服务架构构建应用程序时,安全问题变得更加重要,因为各个服务相互之间以及客户端之间进行通信.因此,在这篇 ...

  7. 分布式服务框架原理与实践pdf_深度解析微服务治理的技术演进和架构实践

    为什么需要服务治理? 第一.业务需求 随着业务的发展,服务越来越多,如何协调线上运行的各个服务,保障服务的SLA,对服务架构和运维人员是一个很大的挑战.随着业务规模的不断扩大,小服务资源浪费等问题逐渐 ...

  8. 技术实践 | 网易云信 QUIC 加速服务架构与实践

    导读:网易云信作为音视频服务提供商的领导者,一直致力于提供顶级的音视频通话服务体验,为用户在各种恶劣环境下提供可靠的音视频服务. 文|纪松 网易云信资深音视频服务端开发工程师 如何在极端弱网条件下仍然 ...

  9. 微服务最佳实践:MSE 微服务引擎

    简介:微服务引擎 MSE(Microservice Engine)是一个面向业界主流开源微服务框架 Spring Cloud 和 Dubbo 的一站式微服务平台.其由四个主要部分组成:微服务治理中心. ...

  10. 东方证券首席架构师樊建:企业微服务架构转型实践

    樊建 读完需要 27 分钟 速读仅需 9 分钟 作者:樊建.舒逸 首发:infoQ,经作者授权转载 微服务架构是近几年受到各行业广泛追捧的技术之一,微服务架构具有轻型化.便捷化.敏捷化等特点,不仅能够 ...

最新文章

  1. 复杂性理论研究的核心问题是什么
  2. #中regex的命名空间_Python命名空间实例解析
  3. 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
  4. 【转】图的点连通度边连通度总结
  5. 算法是什么我记不住,But i do it my way. (二)
  6. freemaker 快速入门
  7. 概率就是个冷冰冰的坑
  8. UNIX环境高级编程之第4章:文件和目录-习题
  9. 设计模式-12-命令模式
  10. libmodbus 开发说明
  11. 抖音壁纸小程序怎么做?教你开通和对接流量主拥有自己的小程序
  12. 爱尔兰都柏林大学计算机科学专业,爱尔兰都柏林大学专业介绍
  13. 微信公众号菜单栏设置直接打电话拨号一键拨号
  14. 如何做一个简单的XX(学生/图书馆)管理系统(一)
  15. C语言 “吞字符” 加不加‘\n‘ ---- #145. 最长的名字
  16. cpu负载过高产生的原因及排查
  17. W51 - 999、电影评价数据的采集
  18. Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found
  19. bat命令批量处理音频文件,增大音频的音量。
  20. 网络广告术语CPC、CPM和CTR的含义和关系

热门文章

  1. 统计学 常用的数据分析方法大总结,推荐收藏
  2. java 制作简历_个人简历java制作.doc
  3. Esri官网购买个人版ArcGIS Pro激活方法
  4. php 删除服务器指定目录图片
  5. 【多多情报通】拼多多个人店铺怎么升级为企业店铺?怎么转让?
  6. IDEA+Java控制台实现商品管理系统
  7. 无法找到资源编辑器dll
  8. Charles抓包基本应用
  9. 进销存excel_Excel教程:教大家做简单的进销存
  10. DM7 达梦 数据库 数据守护(Data Watch) -- 实时主备环境搭建