REST的小例子

Delphi:XE8

看了好几天的资料了,也没有弄出来一个REST程序,尝试了XE8中带的例子,也都没有搞懂。我在网上不断搜索,看是否能够找到适合自己的文章,希望能够做出来一个REST的小例子,万幸,终于弄出来一个了!

这个小程序是把IP地址发送到淘宝的REST API,得到淘宝IP库返回的解析结果,先看看运行效果吧!


这是一个REST客户端程序,既然自己暂时编不出来REST服务器,那么最简单就是找一个可以尝试的REST服务器,所以我用这种方法先编一个RESET客户端程序,对REST程序了解一下!我们先看看我这个小程序使用了哪些控件:


RESTClient1: TRESTClient;:是REST客户端管理类。

RESTRequest1: TRESTRequest;:负责REST请求相关的工作,处理请求用的参数等。

 RESTResponse1: TRESTResponse:负责REST请求返回的结果,HTTP状态码和返回结果等。

这个小程序的整个单元的源代码在下面:

[delphi]  view plain  copy
  1. unit Unit2;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,  
  7.   System.Classes, Vcl.Graphics,  
  8.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IPPeerClient, Vcl.StdCtrls, REST.Client,  
  9.   Data.Bind.Components, Data.Bind.ObjectScope;  
  10.   
  11. type  
  12.   TForm2 = class(TForm)  
  13.     RESTClient1: TRESTClient;  
  14.     RESTRequest1: TRESTRequest;  
  15.     RESTResponse1: TRESTResponse;  
  16.     Button1: TButton;  
  17.     Memo1: TMemo;  
  18.     Edit1: TEdit;  
  19.     Label1: TLabel;  
  20.     procedure Button1Click(Sender: TObject);  
  21.   private  
  22.     { Private declarations }  
  23.   public  
  24.     { Public declarations }  
  25.   end;  
  26.   
  27. var  
  28.   Form2: TForm2;  
  29.   
  30. implementation  
  31.   
  32. uses System.json;  
  33.   
  34. {$R *.dfm}  
  35.   
  36. procedure TForm2.Button1Click(Sender: TObject);  
  37. var  
  38.   JO, JData: TJSONObject;  
  39.   code: string;  
  40.   temp: string;  
  41. begin  
  42.   
  43.   RESTClient1.BaseURL := 'http://ip.taobao.com//service/getIpInfo.php?ip=' +  
  44.     trim(Edit1.Text);  
  45.   RESTRequest1.Execute;  
  46.   
  47.   // 清理先前数据  
  48.   Memo1.Clear;  
  49.   
  50.   Memo1.Lines.Add('请求时间:' + Formatdatetime('yyyy-mm-dd hh:mm:ss zzz', now)  
  51.     + #13#10);  
  52.   
  53.   // 在memo中显示得到数据  
  54.   temp := temp + '原始数据:' + #13#10;  
  55.   temp := temp + RESTResponse1.Content + #13#10;  
  56.   Memo1.Lines.Add(temp);  
  57.   
  58.   // 解析得到的JSON数据  
  59.   JO := TJSONObject.ParseJSONValue(RESTResponse1.Content) as TJSONObject;  
  60.   
  61.   // 得到错误编号  
  62.   code := (JO.Get('code').JsonValue as TJSONString).ToString;  
  63.   
  64.   if code = '0' then  
  65.   begin  
  66.   
  67.     // 解析具体数据  
  68.     JData := JO.Get('data').JsonValue as TJSONObject;  
  69.   
  70.     temp := '解析的详细数据' + #13#10;  
  71.   
  72.     // ISP  
  73.     temp := temp + ' I S P:' + (JData.Get('isp').JsonValue as TJSONString)  
  74.       .ToString + #13;  
  75.     Memo1.Lines.Add(temp);  
  76.   
  77.     // 国家  
  78.     temp := '国家:' + (JData.Get('country').JsonValue as TJSONString)  
  79.       .ToString + #13;  
  80.     Memo1.Lines.Add(temp);  
  81.   
  82.     // 地区  
  83.     temp := '地区:' + (JData.Get('area').JsonValue as TJSONString).ToString + #13;  
  84.     Memo1.Lines.Add(temp);  
  85.   
  86.     // 省份  
  87.     temp := '省份:' + (JData.Get('region').JsonValue as TJSONString)  
  88.       .ToString + #13;  
  89.     Memo1.Lines.Add(temp);  
  90.   
  91.     // 城市  
  92.     temp := '城市:' + (JData.Get('city').JsonValue as TJSONString)  
  93.       .ToString + #13#10;  
  94.     Memo1.Lines.Add(temp);  
  95.   
  96.   end;  
  97.   
  98. end;  
  99.   
  100. end.  
使用方法: 1、下载工程文件; 2、将工程文件导入到eclipse等,或者直接进行发布,如直接将工程放到【tomcat】/webapps/下即可。 3、搜索整个工程文件,将字符串8080改为你自己服务器的IP; 4、启动服务器。 测试方法: 1、main函数测试 打开Client类,运行main函数可测试post和delete方法; 2、进行单个Application测试: 1)返回所有学生信息:http://localhost:8080/RestApplication/rest/student 2)执行Client类的main函数,添加一条学生信息; 3)重复1); 4)获取ID=1的单个学生信息:http://localhost:8080/RestApplication/rest/student/1 5)打开http://localhost:8080/RestApplication/update.jsp页面,输入相关信息,提交;如果提交失败,请检查页面表单的 action属性值是否正确; 6)重复4),查看信息被修改的情况; 3、使用Component绑定多个Application 本代码源自转自【http://www.lifeba.org/arch/restlet_develop_application_component_2.html 】但有改动,主要改动有: 1. 修改了web.xml的段,使工程既可以访问rest服务,又可以访问普通的页面资源,不用再像原作者那样再单独部署一个页面工程。 2. 由于【1】的改动,使得只有以/rest开头的URL才能映射到某资源,使用rest服务时,必须要加上/rest。 3. 由于【1】的改动,RestComponent类注册application时将资源字符串加上了/rest。 4. 由于【1】的改动和本人WEB服务器端口号的不同,Client测试类的相关资源字符串也做了相应改动。
### Delphi 中调用 Java RESTful 服务的实现 在 Delphi 中调用 Java 提供的 RESTful 服务可以通过 `TIdHTTP` 或者更现代的方式如 `REST.Client` 组件库完成。以下是具体方法以及代码示例。 #### 使用 TIdHTTP 调用 RESTful 接口 `TIdHTTP` 是 Indy 的核心组件之一,用于发送 HTTP 请求并接收响应数据。下面是一个简单的 GET 和 POST 请求示例: ```delphi uses IdHTTP, System.JSON; function GetDepartment(const URL: string): string; var IdHTTP: TIdHTTP; begin IdHTTP := TIdHTTP.Create(nil); try Result := IdHTTP.Get(URL); // 发送 GET 请求 finally IdHTTP.Free; end; end; procedure AddDepartment(const URL: string; const DepartmentName: string); var IdHTTP: TIdHTTP; Params: TStringStream; begin IdHTTP := TIdHTTP.Create(nil); Params := TStringStream.Create('{"name": "' + DepartmentName + '"}', TEncoding.UTF8); try IdHTTP.Request.ContentType := 'application/json'; // 设置请求头为 JSON 类型 IdHTTP.Post(URL, Params); // 发送 POST 请求 finally Params.Free; IdHTTP.Free; end; end; ``` 上述代码展示了如何通过 `TIdHTTP` 向 RESTful API 发起 GET 和 POST 请求[^1]。对于其他类型的请求(如 PUT、DELETE),可以分别使用 `Put` 和 `Delete` 方法。 #### 使用 REST.Client 调用 RESTful 接口 Delphi 自带的 `REST.Client` 单元提供了更高层次的支持,简化了与 RESTful 服务交互的过程。以下是如何利用该单元发起请求的一个例子: ```delphi uses REST.Client, REST.Types, System.JSON; function FetchDepartment(const BaseURL, DeptNo: string): TJSONObject; var RESTClient: TRESTClient; RESTRequest: TRESTRequest; RESTResponse: TRESTResponse; begin RESTClient := TRESTClient.Create(BaseURL); RESTRequest := TRESTRequest.Create(nil); RESTResponse := TRESTResponse.Create(nil); try RESTClient.BaseURL := BaseURL; RESTRequest.Method := rmGET; RESTRequest.Resource := Format('/v2/depts/%s', [DeptNo]); // 动态设置资源路径 RESTRequest.Execute; Result := TJSONObject.ParseJSONValue(RESTResponse.Content) as TJSONObject; // 解析返回的 JSON 数据 finally RESTResponse.Free; RESTRequest.Free; RESTClient.Free; end; end; procedure UpdateDepartment(const BaseURL, DeptNo, NewName: string); var RESTClient: TRESTClient; RESTRequest: TRESTRequest; Body: TBody; begin RESTClient := TRESTClient.Create(BaseURL); RESTRequest := TRESTRequest.Create(nil); try RESTClient.BaseURL := BaseURL; RESTRequest.Method := rmPUT; RESTRequest.AddBody(TJSONString.Create('{"name": "' + NewName + '"}'), ctAPPLICATION_JSON); // 添加 JSON 格式的主体 RESTRequest.Resource := Format('/v1/depts/%s', [DeptNo]); RESTRequest.Execute; finally RESTRequest.Free; RESTClient.Free; end; end; ``` 这段代码演示了如何使用 `REST.Client` 来执行 GET 和 PUT 请求[^3]。注意,在实际项目中可能还需要处理异常情况和验证服务器返回的状态码。 --- ### 总结 无论是采用传统的 `TIdHTTP` 还是现代化的 `REST.Client` 方案,都可以轻松地让 Delphi 客户端应用程序连接到由 Java 实现的 RESTful Web Service 上。选择哪种方式取决于项目的复杂度和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值