Mit einem Rest-Client in Delphi ein Rest-Service verwenden

Um in Delphi einen Rest-Service zu konsumieren, gibt es hier eine sehr gute Bibliothek von Fabricio Colombo auf github. Diese sollte ab Delphi 7 funktionieren und lässt sich sehr gut in eigene Projekte einbauen. Hier eine Anleitung wie der RestClient verwendet werden kann:

Als ersten Schritt speichert man die Bibliothek von der GitHub Seite in ein Verzeichnis und öffnet in der Delphi IDE im Verzeichnis ‚packages‘ für seine Delphi-Version passende Package. Im Falle von Delphi XE die Datei „[Bibliotheks-Verzeichnis]/packages/XE/DelphiXE_RestApi.dproj“. Dann installiert man das Package, indem man im Fenster „Projektverwaltung“ mit Rechtsklick auf die entsprechende .bpl-Datei den Punkt „Installieren“ auswählt. Hat man dies ausgeführt, sollte in der Tool-Palette die Gruppe „Rest“ mit der Komponente „RestClient“ aufscheinen.

Automatisch sollte damit auch der Bibliothekspfad ergänzt worden sein. Falls nicht, fügt man den Pfad zu den Delphi Bibliothekspfaden hinzu. In der Version Delphi XE geht man dazu auf Tools -> Optionen -> Delphi-Optionen -> Bibliothek und klickt beim ersten Punkt Bibliothekspfad auf den „…“-Button, um in dem sich öffnenden Fenster die Pfade zum „lib“ und „src“ Verzeichnis hinzuzufügen.

Grundsätzlich kann man den Rest-Client direkt verwenden, ich habe mich dazu entschlossen ihn im nächsten Post um ein paar nützliche Funktionen zu erweitern. Aber hier zuerst ein einfaches Beispiel für eine Abfrage. Wir gehen davon aus dass es im Netz eine Rest-Schnittstelle zum Abfragen der Mitarbeiter-Daten gibt, welche auf http://intranet/rest/mitarbeiter/ liegt. Wir wollen nun die Nachnamen aller Mitarbeiter ausgeben:

Zuerst definieren wir eine Klasse TMitarbeiter, auf welcher die JSON-Daten gemappt werden:

unit Mitarbeiter;

interface

type
  TMitarbeiter = class(TObject)
  public
    id: string;
    vorname: string;
    nachname: string;

  end;

implementation
end.

Dann öffnen wir ein neues Formular-Projekt und platziere eine TRestClient-Komponente und einen TButton darauf. Für das Beispiel benötigen wir noch die TList-Klasse und RestUtils, deshalb ergänzen wir die uses-Klausel neben der Mitarbeiter-Klasse noch um Generics.Collections und RestUtils.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Mitarbeiter, StdCtrls, RestClient, Generics.Collections, RestUtils;

type
  TForm1 = class(TForm)
    RestClient1: TRestClient;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    mitarbeiterList : TList<TMitarbeiter>;
    i: integer;
begin
    mitarbeiterList := RestClient1.Resource('http://intranet/rest/mitarbeiter/')
                     .Accept(RestUtils.MediaType_Json)
                     .Get<TList<TMitarbeiter>>();

    for i := 0 to mitarbeiterList.Count - 1 do begin
        showmessage(mitarbeiterList.Items[i].nachname);
    end;
end;

end.

Mit Ressource teilen wir dem RestClient mit, unter welcher URI sich die Schnittstelle befindet und welche Ressource wir abfragen wollen. In der .Get-Funktion müssen wir deklarieren, auf welchen Typ die zurückgegebenen Daten gemappt werden sollen, hier eine Liste aller Mitarbeiter. Die Schnittstelle muss also z.B. folgende JSON-Daten zurückliefern, damit wir diese verwenden können:

[ {
  "id" : 1,
  "vorname" : "Anton",
  "nachname" : "Berta"
}, {
  "id" : 2,
  "vorname" : "Cäsar",
  "nachname" : "Dora"
}]

Soweit der grundlegende Einsatz. Auf der GitHub-Seite des Projekts findet man auch Beispiele für die anderen HTTP-Methoden wie POST, PUT oder DELETE.

 

 

Schreibe einen Kommentar