表述性状态转移(REpresentational State Transfer)简称REST,REST软件架构由Roy Thomas Fielding博士在2000年首次提出,我们可以从他的论文中看到关于REST的详细描述:

英文:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
中文:http://e2c.91yee.com/posts/show/186

如何将REST解释清楚,InfoQ上有两篇文章:深入浅出REST、理解REST软件架构。

还有IBM DeveloperWorks上也有一些文章,就不一一列举了,初次接触REST的可以先看看《深入浅出REST》,有兴趣可以Google/Baidu查找更多的相关资料,特别是Fielding博士的论文。直接通读理论有时难免会有些晦涩,而将理论放到实际应用中往往可以得到更好的理解,因此这里我不去讲解REST是什么(我自己还在学习中),但可以先记住《深入浅出REST》中总结的REST五条关键原则:

*为所有“事物”定义ID
*将所有事物链接在一起
*使用标准方法
*资源多重表述
*无状态通信

ArcGIS Server 9.3(简称Ags93)提供了全新的REST API,实现了一些Ags通用功能和服务便于Ags客户端开发,如javascript api。安装了Ags93之后,可以通过"http://<host>/<instance>/services/<folder>"方式来访问服务的根目录,其中"instance"默认为"arcgis/rest",里面列举了当前服务器上所有已启动的server服务,并且可以将这些服务列表导入Google Earth,格式为kmz。REST访问地址中,folder和service name是对大小写敏感的,folder前面的部分则没有影响。

点击根目录列举的一个服务,页面会展示该服务的所有基本信息,包括地图图层,图层编号,空间参考,部分cache信息,初始化地图显示范围,地图全图显示范围,地图单位,MXD文档基本信息。

同时,还可以选择将该服务放置在哪一种客户端(平台)上显示,ArcGIS JavaScript链接为:
http://localhost/ArcGIS/rest/services/beijing/MapServer?f=jsapi

这为Ags Javascript API访问REST API提供了一种途径,其他的客户端都可以用"f"这个参数来指定。

REST里所描述的服务,包含资源和操作两种类型,上面所说的是资源,就是描述该服务的一些属性信息,操作指的是基于该服务能够实现的功能,如导出地图、查询、搜索、生成KML。

资源和操作的整体框架:

每一种资源都有统一的URI来标识,资源通过链接被相互关联在一起,如Map Service下的各种操作功能,并且资源有多重表述方式,如希望地图服务返回图片,可以在URI指定参数"f=image",返回在ArcMap中浏览的图层文件,指定"f=lyr",返回在javascript api客户端浏览的网页,指定"f=jsapi"等等,这些都取决于我们的应用和需求。这种框架结构粗看有点ArcXML的感觉,实际上它体现了更多的语义,如何在javascript api调用这些资源,两个文档中的简单例子:

添加一个cache地图:

myTiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://servery.esri.com/arcgis/rest/services/maps/world/MapServer");
myMap.addLayer(myTiledMapServiceLayer);

对图层构建查询功能:

function init() {
//build query
myQueryTask = new esri.tasks.QueryTask("http://servery.esri.com/arcgis/rest/services/maps/world/MapServer/1");
. . .

Ags Javascript API基于REST API构建,其消息是通过JSON格式进行传递的,如
http://localhost/arcgis/rest/services/maps/world/MapServer/export?bbox=-197.99999664046,-131.792384313038,197.99999664046,125.388423131397&f=json

其返回的格式为:

{"href" : "http://servery.esri.com/arcgisoutput/_ags_map26163878476945a499cd7521135dd581.png","width" : 400,"height" : 400,"extent" :{"xmin" : -197.99999664046,"ymin" : -201.201977231281,"xmax" : 197.99999664046,"ymax" : 194.79801604964,"spatialReference" :{"wkid" : 4326}},"scale" : 4.16060604668823E8}

看起来比较杂乱,如果需要阅读性比较好的JSON,需要指定参数"f=pjson"或"f=json&pretty=true",但这样会影响性能,只建议在debug阶段使用:

{
"href" : "http://myserver/arcgisoutput/_ags_mapabab6b08a05a4bf6b1f4047a20ba136b.png",
"width" : 400,
"height" : 400,
"extent" :
{
"xmin" : -197.99999664046,
"ymin" : -201.201977231281,
"xmax" : 197.99999664046,
"ymax" : 194.79801604964,
"spatialReference" :
{"wkid" : 4326}
},
"scale" : 4.16060604668823E8
}

重复REST五条关键原则:

*为所有“事物”定义ID
*将所有事物链接在一起
*使用标准方法
*资源多重表述
*无状态通信

理论的研究经常伴随着复杂、严谨、全面,其实要表达的有时是很简单的道理,慢慢琢磨Ags REST API,会对REST理论有更深入的体会,了解REST,也能更清晰看到Ags REST API的设计结构。

本文转自Flyingis博客园博客,原文链接:xxxxx,如需转载请自行联系原作者

浅析 AGS REST API相关推荐

  1. 浅析阿里云API网关的产品架构和常见应用场景

    自上世纪60年代计算机网络发展开始,API(Application Programming Interface )随之诞生,API即应用程序接口,是实现系统间衔接的桥梁.时至今日,API市场已经形成了 ...

  2. ArcGIS客户端开发学习笔记(五)——ArcGIS REST API基础

    REST:表述性状态转移(REpresentational State Transfer)的简称,它定义了应该如何正确地使用Web标准. 目前我的水平还没到能够深入理解REST的地步,就连略懂皮毛都没 ...

  3. arcgis api for flex 开发入门(二)map 的创建

    arcgis api for flex 开发入门(二)map 的创建 在flex 中创建一个esri 的map ,你只需要使用<esri:Map>标签就可以轻松完成. 在<esri: ...

  4. 深入浅出 Javascript API(五)--Query Find 查询

    作者:Flyingis 本文严禁擅自转载或用于商业目的,如有需要请事先联系作者:dev.vip#gmail.com 查询是webgis常用功能之一,基于地图的查询经历了多种形式的演变,现在用什么形式来 ...

  5. 亚马逊SP-API对接实践解析(amazon selling partner api)

    1.前言 亚马逊(amazon)在2020年10月推出了新的替代MWS的api方案,称为Selling Partner API(SP-API). SP-API在授权方式.权限管理.覆盖站点.支持的卖家 ...

  6. Argo 项目入驻 CNCF,一文解析 Kubernetes 原生工作流

    作者 | 遥鹭.郡宝 **导读:**近期,CNCF 技术监督委员会(Technical Oversight Committee,TOC)投票决定接受 Argo 作为孵化级别的托管项目.作为一个新加入的 ...

  7. git项目比对_Argo 项目入驻 CNCF,一文解析 Kubernetes 原生工作流

    作者 | 遥鹭.郡宝 导读:近期,CNCF 技术监督委员会(Technical Oversight Committee,TOC)投票决定接受 Argo 作为孵化级别的托管项目.作为一个新加入的项目,A ...

  8. 以云战“疫”,这次阿里云又让人们惊了……

    本文转载自CSDN博主「L-JingJing」的原创文章 近日,阿里云对外宣布其容器服务调度GPU云服务器启动加速计算,最快只需60秒即可完成新冠病毒的核酸对比工作:同时将向医疗科研机构.疾控中心等一 ...

  9. 最快60秒完成新冠病毒核酸对比 阿里云向社会免费开放基因计算服务

    全球疫情肆虐,各大科技公司都在竭尽全力抗击疫情.3月13日,阿里云对外宣布,将向医疗科研机构.疾控中心等一线病毒研究机构免费开放基因计算服务,可大幅提升宏基因组测序.疫苗研发相关的处理效率,最快只需6 ...

最新文章

  1. poj_2762,弱连通
  2. 面试官:抛开Spring来说,如何自己实现Spring AOP?
  3. 使用 Google Calendar 免费自动发送手机短信、Email 的方法
  4. php mongo分页查询,PHP操作Mongodb之高级查询篇
  5. HashMap与加载因子/负载因子loadFactor关系
  6. 为什么font-family最后都会加上sans-serif字体?
  7. 用java实现串匹配问题_java实现字符串匹配问题之求最大公共子串
  8. 如何在VS2013中隐藏引用计数?
  9. Android技能树 — Android存储路径及IO操作小结
  10. linux命令行翻页
  11. 将 MySQL 数据库恢复到某个时间点
  12. 解决VMware虚拟机桥接模式无法上网的解决方法 ubuntu
  13. 六种复杂控制系统简述:串级、分程、比值、前馈、选择性和三冲量控制
  14. http://www.cnblogs.com/zxp_9527/archive/2009/05/07/1452253.html
  15. eJOI2019 简要题解
  16. 基于PLC的搬运机器手控制系统设计
  17. iOS - 距离传感器
  18. AUTOSAR OTA升级
  19. GBase XDM初识
  20. python制作闯关答题软件_Pygame制作答题类游戏的实现

热门文章

  1. Zotero安装和使用
  2. 仲恺计算机二级c语言,2009年下半年(第30次)全国计算机等级考试(NCRE)广东考区报考简章...
  3. 考虑碳交易机制的园区综合能源系统电热协同运行优化研究(Matlab代码实现)
  4. 全国优秀计算机动画作品,全国“xx杯”计算机应用基础类说课大赛优秀作品:同步动画教学课件.pptx...
  5. 如何彻底清除还原精灵
  6. 北京内推 | 华为诺亚方舟实验室招聘自动驾驶仿真实习生
  7. ZigBee的发展也有“碎片化”
  8. TextView长按复制实现方法小结
  9. [世界杯] 澳大利亚 vs 日本 3:1
  10. 2018ACM杰出科学家名单公布,12 位华人学者上榜