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.中间件业务对象多,在一个单元里面定 ...
随机推荐
- easyui 表单和自定义验证扩展和js自定义返回值
================jsp==========================<form method="post" id="regfrminp&qu ...
- java 对excel操作导入excel数据到数据库
加入jar包jxl.jar ===================services层掉用工具类==================================== // 导入 public Lis ...
- 10个经典的Java main 方法面试题
1. 不用main方法如何定义一个类? 不行,没有main方法不能运行Java类. 在Java 7之前,你可以通过使用静态初始化运行Java类.但是,从Java 7 开始就不行了. 2. main() ...
- ASP.NET MVC- ActionFilter的使用
ActionFilter是穿插在Action执行过程,在Action执行前后提供扩展的功能.ActionFilter用途非常的广,用在页面压缩.缓存.错误处理,登陆验证. ActionFilter的实 ...
- AUPE学习第八章------进程控制
每个进程都有一个非负整形表示的唯一进程ID. init进程是一号进程,是第一个用户态的进程.它负责内核启动以后启动一个unix系统, 它读取的配置文件一般在/etc/rc*./etc/inittab. ...
- (剑指Offer)面试题20:顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- PHP抓取豆瓣读书爬虫代码
<?php//演示地址 http://asizu.sinaapp.com/reptile_douban.php//数据量不是特别大,没有写抓完数据便停止. 喜欢的朋友拿去自己改改就好了 head ...
- IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
IE兼容CSS3圆角border-radius,box-shadow,text-shadow的方法 1.下载ie-css3.htc 2.CSS box { -moz-border-radius: 15 ...
- jQuery对象入门级介绍
你是否曾经见过像 $(".cta").click(function(){})这样的JavaScrip代码?或许你还会思考下 $('#X') 是什么,如果看到这些你都觉得摸不着头脑 ...
- 气泡形提示控件grumble.js
grumble.js 是一个很特别的气泡形状提示控件,最开始是为 Huddle.com 网站开发的, 它没有通常的north/east/south/west的定位限制. 任何一个grumble都可以放 ...