Delphi REST server za pomoci open source knihovny Express

vložil Radek Červinka 17. ledna 2016 00:03

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.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy: , ,

Komponenty | Praxe

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS