DATASNAP REST WEBSERVICES中间件如何跨平台使用
DATASNAP REST WEBSERVICES中间件如何跨平台使用
准备使用DELPHI开发移动设备开发的朋友对DATASNAP REST中间件不可不了解。
DATASNAP REST新型WEBSERVICES中间件使用的通信协议和数据封装格式:
使用HTTP通信协议,HTTP协议哪个平台都支持;使用JSON作为数据的封装格式,几乎所有的开发语言都可以解析JSON数据。
REST的目的就是通过简单的URL来完成对中间层远程方法的调用并返回JSON格式的数据,调用方解析JSON数据然后将数据秀出来。
正是基于以上原因,DATASNAP REST中间件才可以为苹果和安卓的移动的NATIVE APP提供数据服务;也可以为WINDOWS、LINUX、MAC等
桌面型NATIVE APP提供数据服务。
下面笔者将对跨平台作出演示:
1.根据DELPHI的向导生成DATASNAP REST中间件(略过)。
2.在中间件远程方法里面增加一个方法:
function TServerMethods1.GetData(sql: string): tdataset;
begin
q.close;
q.sql.clear;
q.sql.text := sql;
q.Open;
Result:= q;
end;
3.客户端调用,因为演示跨平台的原因,此处只介绍通过URL调用中间件的方法。
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
jo: ISuperObject;
ja, jb, jc: TSuperArray;
i, h: Integer;
FieldList: TStringList;
arr: array of array of string;
begin
Memo1.Clear;
FieldList:= TStringList.Create;
try
s := idhttp1.Get('http://localhost:8080/datasnap/rest/TServerMethods1/GetData/select * from t1 where iid=''2''');
Memo1.Lines.add(s);
jo := so(s);
ja := jo['result'].AsArray;
// 获取字段列表
jb := ja[0]['table'].AsArray;
for i := 0 to jb.Length-1 do begin
jc := jb[i].AsArray;
FieldList.Add(jc[0].AsString)
end;
// 数据集创建字段
cds.close;
cds.FieldDefs.Clear;
for i := 0 to fieldList.Count -1 do begin
CDS.FieldDefs.Add(fieldList[i],ftString,100, False);
end;
CDS.CreateDataSet;
// 设置表格的列宽
for i := 0 to dbgrid1.Columns.Count-1 do begin
DBGrid1.Columns[i].width := 80;
end;
// 数据集填充数据
SetLength(arr, ja[0][FieldList[0]].AsArray.Length, FieldList.Count);
for i := 0 to fieldlist.count-1 do begin // col
jb := ja[0][FieldList[i]].AsArray;
for h := 0 to jb.Length-1 do begin // row
arr[h, i] := jb[h].AsString;
end;
end;
cds.DisableControls; try
for i := 0 to jb.Length-1 do begin // row
cds.Append;
for h := 0 to fieldlist.count-1 do begin // col
cds.Fields[h].Value := arr[i, h];
end;
cds.Post;
end;
finally
cds.EnableControls;
end;
finally
FieldList.Free;
end;
end;

几乎所有的开发语言都支持通过HTTP GET,然后解析中间件返回的JSON数据。具体代码由各开发语言的程序员编写,此处
只介绍DELPHI如何URL调用的代码。
4.返回的JSON数据样例
{"result":[{"table":[["iid",26,0,0,50,102,102,0,false,false,0,false,false],["name",26,1,0,50,102,102,0,false,false,0,false,false]],"iid":["1","2"],"name":["\u6D4B\u8BD5\u4E00","\u6D4B\u8BD5\u4E8C"]}]}
各开发语言解析JSON数据然后呈现。
DATASNAP REST WEBSERVICES中间件如何跨平台使用的更多相关文章
- datasnap的前世今生
随着XE6,XE7,以及半年以后即将发布的XE8,DATASNAP将顺应跨平台的需要, 有可能的情况是这样的:XE8,DATASNAP写的中间件将可以运行在LINUX服务器上面. 大家都知道COM是W ...
- 移动OA,致我们终将逝去的青春(程序员版)[转]
移动OA和致青春有什么关系,难道说赵薇也来做手机应用了?为什么不行,当年小燕子代言的打印机可是红火的很,现在再秀一把时尚手机办公也未必不可啊.言归正转,本文还是以点代面阐述移动OA开发过程,但是,它的 ...
- Delphi XE5中的新增内容
Delphi XE5中的新增内容 Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的.多设备应用开发解决方案的最新版本.使用Delphi XE5的新特 ...
- libmidas.so.2
libmidas.so.2 libmidas.so.2文件,使DATASNAP FOR LINUX中间件,支持OleVariant格式的序列,使TDataSetProvider+TClientData ...
- MQ系列(0)——MQ简介
mq简介 mq 就是消息队列(Message Queue).想必大家对队列的数据结构已经很熟悉了,消息队列可以简单理解为:把要传输的数据放在队列中,mq 就是存放和发送消息的这么一个队列中间件.在消息 ...
- 论DELPHI跨平台中间件的策略
论DELPH跨平台中间件的策略 1)起先DELPHI只支持WINDOWS,此时DELPHI三层开发的眼里只有WINDOWS COM. 基于WINDOWS COM的OleVariant组合拳=TData ...
- 论DATASNAP中间件对象池
在此,笔者以DATASNAP为例,其它中间件以此类推. 中间件为什么要使用对象池? 对象池——让所有的对象免堕轮回之苦,对象不再为其生和死而烦恼. 要想让中间件长久稳定地运行,做到无人值守,对象池很重 ...
- 咏南DATASNAP中间件提供免费使用了
咏南DATASNAP中间件提供免费使用了. 百度网盘分享: 链接: http://pan.baidu.com/s/1c06Ivp2 密码: dhhm
- DATASNAP复杂中间件的一些处理方法
1.中间件需要连接SQL SERVER\ORACLE\MYSQL多种数据库,怎么办? [解决]:可以搞多种数据模块池对应多种数据库,一种数据模块池对应一种数据库 2.中间件业务对象多,在一个单元里面定 ...
随机推荐
- Firefox 设置技巧
在Firefox地址栏中输入“about:cache”并键入回车,接着将显示Firefox的内存缓冲设置与磁盘高速缓存设置.如果在页面上单击“List Cache Entries”链接,我们还可以查看 ...
- python 缩进问题
200 ? "200px" : this.width)!important;} --> 介绍 在python中认为规定4个空格缩进,缩进的代码可以理解成一个块,但是使用缩进也 ...
- cmd命令。
CMD按任意退出 echo 退出……按任意键pause & exit
- InteractivePNG
在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”.
- 转载:页面加载swf插件:swfobject
转自:http://www.cnblogs.com/analyzer/articles/1299592.html 我一直都在用SWFObject 插入flash,好处多多,代码简洁,不会出现微软的“单 ...
- perl学习笔记(3)—— 坑
(1)用perl来ls一个目录: 写perl的时候,经常要调用到系统命令,perl有很多等价的函数可以用,但是,不小心任性了,就想用system来实现了,好吧,来个ls把,列出指定的一个目录,直接上代 ...
- 【转】python代码风格-PEP8
转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...
- Flexigrid在IE下不显示数据的处理
文章总结自我的论坛提问: http://bbs.csdn.net/topics/390498434?page=1#post-394918028 解决方法: 网上的答案经我验证都是不靠谱的,以后大家就知 ...
- SQL Server-删除表中重复的记录!
比如现在有一人员表 (表名:peosons)若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.* from persons p1,persons p ...
- 【好文翻译】测试必看:使用Spire.XLS来生成自动化报表!
Download C# project - 7.1 KB 介绍 在我的编程博客中,我经常会比较不同算法或原理的性能特征.我常常会把性能日志(如花费时间)输出到控制台或者文本文件,然后复制到电子表格中 ...