REST
REST,资源表现形式的转变。
REST是一种软件架构风格。REST模式相比复杂的SOAP和XML-RPC对比来看,前者更加简洁,越来越多的WEB服务开始采用REST架构风格。
REST架构风格把网络上分布的各种数据看做是资源,分布在各处的资源由URI来标识,而客户端应用通过URI来获取资源的表现形式。
REST是一种设计风格而不是一种标准。
REST架构的应用通常基于HTTP、URI、XML以及HTML这些现有的协议和标准搭建,资源由URI来指定。对资源的操作包括创建、获取、修改和删除,正好对应于HTTP协议的GET、POST、PUT和DELETE方法。
REST通过操作资源的表现形式来操作资源。
REST API
暂且就把REST API理解为访问资源的URI。
ArcGIS REST API
自9.3版本,ArcGIS Server开始提供REST API,客户端通过REST API访问服务器上发布的GIS服务。
比如:
查看服务器目录:http://192.168.71.182/ArcGIS/rest/services
http://192.168.71.182/ArcGIS/rest/services?f=html
http://192.168.71.182/ArcGIS/rest/services?f=pjson
这三个URI可以理解为获得GIS服务目录的API,第一和第二个返回Html页面,第三个则返回json信息:
这是通过HTTP的GET方法获得资源,资源分别以html和json格式返回。
生成管理员令牌API:http://<IP>/ArcGIS/rest/admin/generateToken?f=html
这个操作只支持POST方法,因为存在密码的操作。
POST方法,下面是返回结构(json)
{ "token" : "VmPxYEpYzr47euTWGlRbgA2GiturXTUZo8PiQFD3w3RBNHMV_3vSz7QbrirEOX1b5RkHlANh7glFbbJfVeilCA..", "expires" : 1427878211494 }
清楚缓存API(利用上面生成的Token):http://192.168.71.182/ArcGIS/rest/admin/cache/clear?token=VmPxYEpYzr47euTWGlRbgA2GiturXTUZo8PiQFD3w3RBNHMV_3vSz7QbrirEOX1b5RkHlANh7glFbbJfVeilCA..&f=json
返回结果:
{"success":"true"}
ArcGIS Server提供很多REST API,如下:
Map Service API:http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer
瓦片地图的REST API:http://services.arcgisonline.com/arcgis/rest/services/ESRI_Imagery_World_2D/MapServer/tile/0/0/1
获得图层和表:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/layers?f=pjson
查询所需的参数:http://resources.arcgis.com/en/help/arcgis-rest-api/index.html#/Query_Map_Service_Dynamic_Layer/02r3000000z6000000/
Geometry Services REST API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer
其中的Buffer 的API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer/buffer?geometries=-117%2C34&inSR=4326&outSR=4326&bufferSR=3857&distances=1000&unit=&unionResults=true&geodesic=false&f=pjson
Feature Service的REST API:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Wildfire/FeatureServer/0
可以看到,支持添加、修改、删除等操作。其实在客户端对图层进行增删改的操作同样是使用REST API。
ArcGIS 客户端 API(for Flex&JavaScript&SilverLight)
客户端API其实质是对ArcGIS Server REST API的再包装,其本质是通过HTTP Service访问REST API,然后处理返回结果,以地图和数据的形式显示处理。
比如:
浏览地图就是不停的根据范围去获取服务器上的切片REST API:http://services.arcgisonline.com/arcgis/rest/services/ESRI_Imagery_World_2D/MapServer/tile/0/0/1
然后将切片拼接在一块儿形成我们看到的地图,而使用客户端则简化为通过map控件或类,将map service的REST API设定为http://services.arcgisonline.com/arcgis/rest/services/ESRI_Imagery_World_2D/MapServer。
同样,地图的查询、GP服务、几何服务、网络服务都是对相应的REST API的封装。
如:添加要素
这是REST API的Post方式。
返回下面结果:
{ "addResults" : [ { "objectId" : 7, "globalId" : null, "success" : true } ]}
我们完全可以使用任何一种能够进行HTTP 访问的语言来访问ArcGIS REST API实现相应功能。
以下转载至:http://www.cnblogs.com/esrichina/archive/2012/11/05/2754580.html
在Flex中需要三步来完成上述操作,首先构造一个JSON格式字符串;其次调用对应的Rest接口;最后对返回结果进行处理。
|
在Flex中调用ArcGIS Server REST API,通过URLRequest调用一个URL地址就可以了,同时需要将JSON赋值给URLRequest的data属性,设置format为json。至于是选择POST还是GET,这个取决于REST接口支持哪种方式。
|
最后需要对返回的结果进行处理,这里尤其要强调的是,执行后有正确和错误两种返回结果。需要对返回的内容进行判断,才能最终确定是否能正确执行。
|
更新和删除点:
和新增点相差无几,就是调用的REST接口和返回结果有所不同而已,当然需要构造对应的JSON字符串。
感想
我们完全可以为其他语言制作一套客户端API。比如使用C#调用ArcGIS REST API,并将其按照一定的设计模式封装,完成ArcGIS功能的开发,不过这就搞不清楚这是桌面GIS还是WEBGIS了。