標籤:
首先吐槽一下XE關於datasnap的資料真的是太少了。。。
服務端用DSHTTPService1控制項可以實現http介面方式的調用,返回的都是json格式資料,適用於跨平台解析。
這裡著重強調一下datasnap http方式預設為Get方式調用,如果用Post方式的話需要在TServerMethods1單元方法前加update,好無語的方式。。
用Get方式這裡說一下如果介面有參數的情況下,傳遞格式為 介面名/參數1/參數2/……,比如:http://127.0.0.1:8080/datasnap/rest/TServerMethods1/介面名/tom/jerry。
另外如果參數裡有中文的話需要對參數編碼一下,用TIdURI.ParamsEncode方法即可。
用戶端調用介面後,datasnap中介軟體返回的json資料對中文進行了編碼,在用戶端繼續用json編碼一下即可。
用戶端調用例子如下:
procedure TForm2.Button1Click(Sender: TObject);var lrlt: TStringStream; s,lurl: string; jo: TJSONObject; i: Integer;begin lrlt := TStringStream.Create(‘‘); try lurl := edtUrl.Text; lurl := lurl + TIdURI.ParamsEncode(‘/name/啊啊啊‘); IdHTTP1.Get(lurl,lrlt); jo := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(lrlt.DataString),0) as TJSONObject; //返回表格欄位個數 i := TJSONArray(TJSONObject(TJSONArray(jo.GetValue(‘result‘)).Items[0]).GetValue(‘table‘)).Count; mmLog.Lines.Add(IntToStr(i)); finally lrlt.Free; end;end;
datasnap rest Windows用戶端編寫