ArcGIS 服務對象擴展(SOE)新手自學筆記(3):REST SOE模板下


 

1、CreateRESTSchema()和Handle function

  CreateRESTSchema函數中定義了在你的SOE中可以獲取的Resource和Operation,每一個Resource和Operation都與一個處理函數(handle function)相關聯。該處理函數用來在Resource或Operation被觸發時,描述所要進行的處理操作。這里面就是你需要編寫大量AO代碼的地方。

  在REST SOE模板中,有一個處理resource邏輯的RootRESTHandler函數,他返回一個簡單的JSON格式的字符串

  一個resource的handler function實際上是一個在SOESupport類庫中的代理(delegate),這意味着所有的resource的處理函數都有一個類似的函數簽名。

 

  在REST SOE模板中包含了一個Operation的handler function。在此例中,該函數反序列化了兩個字符串參數‘param1’和‘param2’,並且把它們作為JSON格式對象返回給客戶端。

  同resource的處理函數一樣,Operation的處理函數也是一個代理。該方法中出了一個OperationInput參數外,與resource處理函數一樣。operationInput中包含了該operation中需要的參數。比如當你想要實現緩沖區查詢時,該對象會包含一個point和distance參數。

  在該函數中另一個需要關心的問題是,如何反序列化輸入的JSONObject和將得到的結果序列化成客戶端能接受的JSON數據。反序列化和序列化JSONObject有時是個很棘手的問題。(稍后介紹)

 

  有時候我們需要向客戶端返回一些非JSON數據,比如圖片。我們可以通過改變HTTP協議的Content-Type屬性實現

  (1)我們要在實例化RESTOperation時設置它的SupportFormat參數

  (2)在handler function中設置responseProperties參數

 

2.處理JSONObject

  大多數情況下,客戶端和服務器都是通過JSON格式數據進行REST通信。所以,你的handler function必須能夠反序列化JSON數據,提取其中有效值進行業務處理,在處理執行完畢后將結果序列化成JSON數據。

  反序列化JsonObject:

  問題在於AO中無法直接利用JSON數據,幸好ESRI為我們提供了SOESupport類庫,該庫中提供了一系列的方法來解決這個問題。當客戶端發送請求時,JSON數據被作為一個SOESupport.JsonObject的實例傳入到handler function中,處理完后將結果作為JsonObject返回給客戶端。

 

  在上面函數中包含一個JsonObject類型的參數operationInput,它包含了我們需要的參數。上面代碼中使用TryGetString方法將param1轉換為string類型。在JsonObject中還包含以下方法:

  使用“TryGet”方法我們能夠提取Json類型的參數值,並將其轉化成你所定義的變量。可以用這些變量來定義你的AO類型數據。如果我們需要將JSON數據反序列化成geometries類型數據,SOESupport類庫中為我們提供了SOESupport.Conversion.ToGeometry方法,該方法需要一個JsonObject類型或者string作為輸入參數,並返回一個IGeometry類型變量。如下代碼將一個JsonObject轉換為IPoint:

  強調一下,上述代碼中的錯誤檢查是必須的,如果Json數據無法構成IPoint類型,會拋出一個異常。比如{x:-123, y:47}這個Json格式數據可以成功轉換為IPoint,而{x:-123}則會拋出一個異常。

 

  序列化JsonObject:

   當我們的業務邏輯被執行完后,我們需要將結果序列化成JsonObject類型,並返回給客戶端。這里我們依舊可以使用JsonOject類,看以下代碼:

  上述代碼中,如果parm1Value的值為“myFirstParameter”,該函數執行后得到的Json格式對象為“{"param1": "myFirstParameter"}”。該類中還有以下方法來構造json數據:

  有的Geometry對像由於含有子對象或數組,序列化為Json數據時比較棘手,這時我們可以使用SOESupport.Conversion.ToJsonObject方法,該函數接受一個實現了IGeometry類型的對象,並將其序列化為Json對象。如下代碼:

執行后所構成如下Json數據:

以上就是本片內容,本來打算詳細介紹一下Schema、Resource和Operation,后來發現內容太長,這樣我們放在下一篇專門介紹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM