Delphi开发系列(6):使用DataSnap开发Restful接口

第一次基于DataSnap开发Restful接口,折腾了好几天终于入门了。特别是服务器端如何获取客户端post的数据百度和谷歌找遍了几乎都没有直接回答这个问题,最后通过官网的页面(http://docwiki.embarcadero.com/RADStudio/Rio/en/DataSnap_REST_Messaging_Protocol)找到了,记录如下:

创建一个DataSnap REST应用

Delphi开发系列(6):使用DataSnap开发Restful接口_第1张图片

Delphi开发系列(6):使用DataSnap开发Restful接口_第2张图片

Delphi开发系列(6):使用DataSnap开发Restful接口_第3张图片

Delphi开发系列(6):使用DataSnap开发Restful接口_第4张图片

Delphi开发系列(6):使用DataSnap开发Restful接口_第5张图片

Delphi开发系列(6):使用DataSnap开发Restful接口_第6张图片

ServerMethodsUnit1代码如下:

unit ServerMethodsUnit1;

interface

uses
  System.SysUtils, System.Classes, System.Json,
  DataSnap.DSProviderDataModuleAdapter,
  Datasnap.DSServer, Datasnap.DSAuth;

type
  TServerMethods1 = class(TDSServerModule)
  private
    { Private declarations }
  public
    { Public declarations }

    //Restful接口测试
    //GET
    function Test(Value: string): string;
    //POST
    function updateTest(Value: string; Obj: TJSONObject): string;
    //DELETE
    function cancelTest(Value: string): string;
    //PUT
    function acceptTest(Value: string; Obj: TJSONObject): string;
  end;

implementation

{%CLASSGROUP 'System.Classes.TPersistent'}

{$R *.dfm}

uses
  System.StrUtils, Data.DBXPlatform;

//GET
function TServerMethods1.Test(Value: string): string;
var
  p1: string;
  p2: string;
begin
  p1 := GetInvocationMetadata.QueryParams.Values['p1'];
  p2 := GetInvocationMetadata.QueryParams.Values['p2'];
  Result := Format('Test called,Value:%s,p1:%s,p2:%s',[Value,p1,p2]);
end;
//POST
function TServerMethods1.updateTest(Value: string; Obj: TJSONObject): string;
var
  p1: string;
  p2: string;
  data1: string;
  data2: string;
begin
  p1 := GetInvocationMetadata.QueryParams.Values['p1'];
  p2 := GetInvocationMetadata.QueryParams.Values['p2'];
  if Obj <> nil then
    begin
      data1 := obj.GetValue('data1').ToJSON;
      data2 := obj.GetValue('data2').ToJSON;
    end;
  Result := Format('updateTest called,Value:%s,p1:%s,p2:%s,data1:%s,data2:%s',[Value,p1,p2,data1,data2]);
end;

//DELETE
function TServerMethods1.cancelTest(Value: string): string;
var
  p1: string;
  p2: string;
begin
  p1 := GetInvocationMetadata.QueryParams.Values['p1'];
  p2 := GetInvocationMetadata.QueryParams.Values['p2'];
  Result := Format('cancelTest called,Value:%s,p1:%s,p2:%s',[Value,p1,p2]);
end;

//PUT
function TServerMethods1.acceptTest(Value: string; Obj: TJSONObject): string;
var
  p1: string;
  p2: string;
  data1: string;
  data2: string;
begin
  p1 := GetInvocationMetadata.QueryParams.Values['p1'];
  p2 := GetInvocationMetadata.QueryParams.Values['p2'];
  if Obj <> nil then
    begin
      data1 := obj.GetValue('data1').ToJSON;
      data2 := obj.GetValue('data2').ToJSON;
    end;
  Result := Format('acceptTest called,Value:%s,p1:%s,p2:%s,data1:%s,data2:%s',[Value,p1,p2,data1,data2]);
end;

end.

客户端请求用Delphi自带的工具进行测试(源代码在Embarcadero\Studio\20.0\source\data\rest\restdebugger,可以学习怎么提交请求)。

GET调用结果:

Delphi开发系列(6):使用DataSnap开发Restful接口_第7张图片

 

Delphi开发系列(6):使用DataSnap开发Restful接口_第8张图片

POST调用结果:

Delphi开发系列(6):使用DataSnap开发Restful接口_第9张图片

 

PUT调用结果:

Delphi开发系列(6):使用DataSnap开发Restful接口_第10张图片

 

DELETE调用结果:

Delphi开发系列(6):使用DataSnap开发Restful接口_第11张图片

Delphi开发系列(6):使用DataSnap开发Restful接口_第12张图片

 

 

你可能感兴趣的:(Delphi)