datasnap rest Windows客户端编写
2016-09-27 21:36
190 查看
首先吐槽一下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方法即可,不过最好重写一下这个方法,因为rest协议参数是以"/"来分割的,所以接口有参数的话请把每个参数内容重新编码再加上“/”字符拼接发送过去。
客户端调用接口后,datasnap中间件返回的json数据对中文进行了编码,在客户端继续用json编码一下即可,xe自带json解析方法,D7的话可以用superobject单元(第三方)。
客户端调用例子如下:
服务端用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方法即可,不过最好重写一下这个方法,因为rest协议参数是以"/"来分割的,所以接口有参数的话请把每个参数内容重新编码再加上“/”字符拼接发送过去。
客户端调用接口后,datasnap中间件返回的json数据对中文进行了编码,在客户端继续用json编码一下即可,xe自带json解析方法,D7的话可以用superobject单元(第三方)。
客户端调用例子如下:
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;
相关文章推荐
- python 装饰器简单释义
- ARM的寻址方式
- 统计学习-KNN
- Java之 byte[]转String问题
- 生产者-消费者与队列的简单示例
- windows上scrapy环境搭建
- 【leetcode】2. Add Two Numbers
- 292. Nim Game
- UVA 699 The Falling Leaves(二叉树)
- 前端面试知识点--5
- javascript实现简单轮播器
- 如何在Unity中实现物体的二段跳
- 用户登录相关问题
- 以php为例直接用html生成excel文件
- Java web video 视频开发
- 往事不可谏
- React实战-React标配单元测试工具Jest
- 旋转卡壳学习笔记
- 一天一个设计模式---生成器模式
- 【poj3608】 Bridge Across Islands