zoukankan      html  css  js  c++  java
  • datasnap rest Windows客户端编写

    首先吐槽一下XE关于datasnap的资料真的是太少了。。。


    1. 服务端用DSHTTPService1控件可以实现http接口方式的调用,返回的都是json格式数据,适用于跨平台解析。
    2. 这里着重强调一下datasnap http方式默认为Get方式调用,如果用Post方式的话需要在TServerMethods1单元方法前加update,好无语的方式。。
    3. 参数传递:用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;
  • 相关阅读:
    cocos2dx环境搭建(android平台)
    转:Android开发实践:Java层与Jni层的数组传递
    转:Linux串口编程入门详解
    Linux串口通信之termios结构体说明
    SQLite3 C语言API入门
    android常用工具记录
    Java中byte与16进制字符串的互相转换
    JNI原理及实现
    Java调用动态库方法说明
    JAVA中使用动态链接库须知
  • 原文地址:https://www.cnblogs.com/hejoy91/p/5914399.html
Copyright © 2011-2022 走看看