REST SOE是什麼?

孫群發表於2013-01-07

關於REST SOE

一種擴充套件ArcGIS for Server並能夠很好的讓Web API方便使用的方式就是以Web服務的形式編寫SOE。

基於REST的服務通過簡單的資料型別接收請求引數並返回響應結果,一般是JSON型別。如果你以前沒開發過REST,不要被它嚇倒。JSON僅僅是一種以標準方式被程式閱讀的格式化的文字資訊。

為了能夠使用REST SOE Web服務,需要獲取SOE的URL並且需要向URL後面新增一些其他的引數資訊,比如x、y座標或者是圖層名稱。然後伺服器會完成相應的工作並返回響應資訊,這些響應資訊有可能是屬性資料、向量點或者是圖片。


REST服務示例

下面的程式碼是一個使用ArcGIS Server REST 服務的示例。第一個示例沒有使用SOE,但是它有助於理解如何請求一個REST Web服務。在這個例子中,你要請求震級大於6.0的近期的地震。這是傳送到伺服器的URL。注意引數是以問好(?)開始。

http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/EarthquakesFromLastSevenDays/MapServer/0/query?where=magnitude>6&f=pjson

以下是被伺服器以JSON格式返回的結果,你可以看到它是一種結構化的鍵值對集合。它們被大括號{}包裹在一起封裝成物件。看如下的程式碼示例:

{
  "displayFieldName" : "eqid",
  "fieldAliases" : {
    "eqid" : "Earthquake ID"
  },
  "geometryType" : "esriGeometryPoint",
  "spatialReference" : {
    "wkid" : 4326
  },
  "fields" : [
    {
      "name" : "eqid",
      "type" : "esriFieldTypeString",
      "alias" : "Earthquake ID",
      "length" : 50
    }
  ],
  "features" : [
    {
      "attributes" : {
        "eqid" : "c0000f0y"
      },
      "geometry" : {
        "x" : 148.95690000000002,
        "y" : -6.0207999999999515
      }
    }
  ]
}

客戶端應用程式可以閱讀和解析JSON格式的響應,並在程式中對它進行處理。比如一個Web瀏覽器可以通過上面程式碼中的geometry中的x、y座標繪製一個點,從而能夠顯示出地震的位置。


REST SOE 示例

上面的示例僅僅使用了一個固定的ArcGIS Server地圖服務,沒有使用SOE。現在來看一下REST SOE的呼叫。下面的URL會根據經緯度去請求高程資訊(這個SOE被叫做ElevationsSOE):

http://sampleserver4.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/MapServer/exts/ElevationsSOE/ElevationLayers/1/GetElevationAtLonLat?lon=-123&lat=47&f=pjson

下面是該URL各部分的詳細解析。注意REST SOE是如何暴露資源和操作的。資源就是伺服器上你可以獲取資訊的東西。操作是伺服器去獲取資訊的方法。在這個例子中,GetElevationAtLogLat就是一種操作。看下面的插圖:


通過使用這個操作,伺服器以簡單JSON物件的形式返回結果。這個值可以被用於表格、標註或者應用程式的其他地方。示例如下:

{
  "elevation" : 83.003478588350134
}

當這些REST服務被呼叫的時候會發生什麼呢?最可能的是,伺服器會執行一些ArcObjects程式碼去得到結果。但是客戶端程式不需要了解ArcObjects。客戶端只需要知道如何傳送RUL請求以及獲取JSON格式的資料。

相關文章