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中间件如何跨平台使用的更多相关文章

  1. datasnap的前世今生

    随着XE6,XE7,以及半年以后即将发布的XE8,DATASNAP将顺应跨平台的需要, 有可能的情况是这样的:XE8,DATASNAP写的中间件将可以运行在LINUX服务器上面. 大家都知道COM是W ...

  2. 移动OA,致我们终将逝去的青春(程序员版)[转]

    移动OA和致青春有什么关系,难道说赵薇也来做手机应用了?为什么不行,当年小燕子代言的打印机可是红火的很,现在再秀一把时尚手机办公也未必不可啊.言归正转,本文还是以点代面阐述移动OA开发过程,但是,它的 ...

  3. Delphi XE5中的新增内容

    Delphi XE5中的新增内容 Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的.多设备应用开发解决方案的最新版本.使用Delphi XE5的新特 ...

  4. libmidas.so.2

    libmidas.so.2 libmidas.so.2文件,使DATASNAP FOR LINUX中间件,支持OleVariant格式的序列,使TDataSetProvider+TClientData ...

  5. MQ系列(0)——MQ简介

    mq简介 mq 就是消息队列(Message Queue).想必大家对队列的数据结构已经很熟悉了,消息队列可以简单理解为:把要传输的数据放在队列中,mq 就是存放和发送消息的这么一个队列中间件.在消息 ...

  6. 论DELPHI跨平台中间件的策略

    论DELPH跨平台中间件的策略 1)起先DELPHI只支持WINDOWS,此时DELPHI三层开发的眼里只有WINDOWS COM. 基于WINDOWS COM的OleVariant组合拳=TData ...

  7. 论DATASNAP中间件对象池

    在此,笔者以DATASNAP为例,其它中间件以此类推. 中间件为什么要使用对象池? 对象池——让所有的对象免堕轮回之苦,对象不再为其生和死而烦恼. 要想让中间件长久稳定地运行,做到无人值守,对象池很重 ...

  8. 咏南DATASNAP中间件提供免费使用了

    咏南DATASNAP中间件提供免费使用了. 百度网盘分享: 链接: http://pan.baidu.com/s/1c06Ivp2 密码: dhhm

  9. DATASNAP复杂中间件的一些处理方法

    1.中间件需要连接SQL SERVER\ORACLE\MYSQL多种数据库,怎么办? [解决]:可以搞多种数据模块池对应多种数据库,一种数据模块池对应一种数据库 2.中间件业务对象多,在一个单元里面定 ...

随机推荐

  1. Linux编译安装RTL8192CU芯片驱动,使用TP_LINK wn823n无线网卡

    前几天给自己的台式电脑安装了Window 7+CentOS 6.4 Linux双系统,发现在Windows 7下面可以正常使用TP_LINK wn823n无线网卡来连接无线网络,但是在Linux下面, ...

  2. 正确理解ContentPresenter

    下图显示继承关系: ContentControl:Control (在Control類並沒有Content屬性, 所以在這之上再寫了一個ContentControl, 使控件有Content屬性可以顯 ...

  3. Android 模仿电视机关闭界面

    Tween动画 1.在关闭电视机的时候,电视机中间都有一根白条瞬间关闭. 要实现这个效果其实就是利用Tween动画进行实现的. 动画的xml 文件是: android:startOffset=&quo ...

  4. aspnetpager的2种分页方法

    <webdiyer:AspNetPager ID="AspNetPager1" UrlPaging="True" PageSize="20&qu ...

  5. NameThreadForDebugging -- Naming threads for debugging

    http://forums.devart.com/viewtopic.php?t=16907 type tagTHREADNAME_INFO = record dwType : LongWord; / ...

  6. Codeforces Round #306 (Div. 2) B. Preparing Olympiad dfs

    B. Preparing Olympiad Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/550 ...

  7. C# udpclient 发送数据断网后自动连接的方法

    需求 有一个winform程序, 用来调试路由器和对路由器吞吐量进行测试 需要后台不断的接收来自udp服务器端的数据,同时要发送数据到服务器端(无线路由器) 设计时候,通过一个线程,for(;;)死循 ...

  8. 【JavsScript】webapp的优化整理

    单页or多页 webapp 现状 优劣之分 网络传输优化 综述 fake页-首屏加速 降低请求数 降低请求量 缓存Ajax/localstorage DOM操作优化 综述 关于页面渲染 减少使用定位属 ...

  9. [Node.js] Level 7. Persisting Data

    Simple Redis Commands Let's start practicing using the redis key-value store from our node applicati ...

  10. 制作简易计算器处理结果Servlet

    ResultServlet.java: package com.you.servlet; import java.io.IOException; import java.io.PrintWriter; ...