Delphi.cz

Český portál Delphi

Delphi REST server za pomoci open source knihovny Express

Aktualizace: lepší variantou je Delphi MVC

Nedávno jsem narazil na Express, jednoduchý REST framework pro Delphi jako rozšíření webbroker. Knihovna se skládá z pouhých tří souborů, ale výsledek je celkem flexibilní.

Pokud máte webbroker aplikaci, tak jen pro výchozí akci přidáte přesměrování volání.

implementation
uses
  Express;

procedure TWebModule2.WebModule2DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  App.Call(Request, Response); <-----------
end;

Zbytek se definuje pomocí atributů třídy a zpracovává se díky RTTI (což mimochodem automaticky znamená unicode verze). Vezmu rozšířený příklad z dokumentace


type
  TContent = record 
    Name: String;
    SurName: String;
  end;

  TContent2 = record
    data: array of TContent;
  end;

  TResult = record
    Success: Boolean;
  end;

  [Location('api/test')] // this optional
  TTest = class(TProvider)
  public
    [GET] [DEFAULT] // default attribute is optional.
    function Multiply(A, B: Integer): Integer;

    [GET]
    function TestSimpleRecord:TContent;

    [GET]
    function TestRecord:TContent2;


    [DELETE] [DEFAULT] 
    function Del(Id: Integer): TResult;

    [POST] [DEFAULT] 
    function Insert(Id: Integer; Content: TContent): TResult; // Content is optional

    [PUT] [DEFAULT] 
    function Update(Id: Integer; Content: TContent): TResult; // Content is Optional
  end;

A pak už jen implementace některých zajímavých metod, výsledek volání framework automaticky mapuje na JSON.


function TTest.Multiply(A, B: Integer): Integer;
begin
  Result := A * B;
end;

function TTest.TestSimpleRecord: TContent;
begin
  Result.Name := 'John';
  Result.SurName := 'Hove';
end;

function TTest.TestRecord: TContent2;
begin
  SetLength(Result.data, 2);

  Result.data[0].Name := 'AAAAA';
  Result.data[0].SurName := 'BBBBB';

  Result.data[1].Name := 'CCCCC';
  Result.data[1].SurName := 'DDDDDDDD';

end;

………..
initialization
  TClassManager.Register(TTest);

To je vše.

Volání je pak např. http://adresa/api/test/Multiply/10/20 nebo http://adresa/api/test/TestRecord, což vrátí v našem případě

{"data":[{"Name":"AAAAA","SurName":"BBBBB"},{"Name":"CCCCC","SurName":"DDDDDDDD"}]}

Samozřejmě knihovna má větší možnosti viz domovská stránka, mně se nejvíce líbí ta jednoduchost.

Datum: 2016-01-16 23:03:00 Tagy: REST, webbroker, web

Komponenty Praxe