sgcOpenAPI in fünf Minuten

sgcOpenAPI ist ein Codegenerator, keine Palettenkomponente. Du richtest ihn auf eine Spezifikation, er schreibt eine Pascal-Unit, und du rufst diese Unit aus deinem Projekt auf. Diese Seite führt den Generator einmal aus und macht dann einen echten Aufruf gegen den generierten Client.

OpenAPI 3, JSON und YAML
Erzeugt einen typisierten Delphi-Client oder einen Server-Stub
Nur Delphi, typisierte Antworten ab XE7

Es gibt keine Komponente zum Platzieren

Das ist das Einzige, was du vor dem Start verstehen musst. sgcOpenAPI registriert nichts in der IDE-Palette und liefert kein Entwurfszeitpaket. Der Ablauf lautet: erst generieren, dann verwenden.

Das Werkzeug

sgcOpenAPI.exe, das zugleich ein GUI-Assistent und eine Kommandozeile ist. Es liest eine Spezifikation und schreibt eine .pas-Datei.

Was es schreibt

Eine Unit mit einer von TsgcOpenAPI_Client abgeleiteten Client-Klasse, einer Methode je Operation, den Request- und Response-Klassen und einer Funktion GetOpenAPIClient, die einen einsatzbereiten Singleton liefert.

Wie du ihn aufrufst

Füge die generierte Unit deinem Projekt hinzu, nimm sie in die Uses-Klausel auf und rufe GetOpenAPIClient.YourOperation(...) auf. Das Ergebnis ist ein Response-Objekt, das du freigibst, wenn du damit fertig bist.

Die Pakete

Fünf Laufzeitpakete mit vorgefertigten SDKs für AWS, Azure, Google und Microsoft liegen bei. Sie sind zum Kompilieren da, nicht zum Installieren, denn es gibt keine Palettenseite, die hinzugefügt werden müsste.

Voraussetzungen und Editionen

Die Editionsspalte nennt das Define, das den Code steuert, samt der Zeile in der Source/sgcVer.inc des Produkts, in der es steht.

Was Wert
IDE Delphi 7 bis RAD Studio 13 für den generierten Code. Typisierte Response-Objekte brauchen XE7 oder höher, und die mitgelieferte Demo sichert sie mit {$IF CompilerVersion >= 28.0} ab. Darunter liefert die generierte Methode einen einfachen String.
C++Builder Für den generierten Client nicht unterstützt. SGC_HTTP_OPENAPI, das die gesamte sgcHTTP_OpenAPI_Client.pas steuert, wird innerhalb eines {$IFNDEF BCB} in Zeile 702 der sgcVer.inc des Produkts definiert, ein C++Builder-Build kompiliert diese Unit daher zu nichts.
Edition sgcOpenAPI-Builds sind auf die beiden untersten Stufen festgelegt. Die Zeilen 7 bis 10 ihrer sgcVer.inc lauten {$IFDEF SGC_OPENAPI} gefolgt von {$UNDEF SGC_EDT_PRO}, {$UNDEF SGC_EDT_ENT} und {$UNDEF SGC_EDT_ALL}, sodass Core und Standard definiert bleiben. Die kommerziellen Stufen richten sich nach der Anzahl der Arbeitsplätze, nicht nach Funktionen.
Server-Generierung Derselbe Build definiert SGC_HTTP_OPENAPI_SERVER in Zeile 11, sodass der Generator neben einem Client auch einen Server-Stub erzeugen kann. Übergib dazu -s auf der Kommandozeile.
Plattformen Kein Betriebssystem-Guard auf Unit-Ebene. Die einzigen Bedingungen in der Basis-Unit des generierten Clients sind der übliche {$IFDEF MSWINDOWS}-Import und Wechsel der Thread-ID-Typen, sodass Windows, macOS, Linux, Android und iOS alle kompilieren.
Lizenzaktivierung Wurde der Rechner nicht aktiviert, übergib -user und -password auf der Kommandozeile, sonst endet der Lauf mit Exit-Code 2.

Der Generator akzeptiert JSON und YAML und liest beides lokal. Ein Swagger-2.0-Dokument wird ebenfalls lokal in OpenAPI 3 umgewandelt. Der Remote-Konverter ist optional, über -r, und lädt deine Spezifikation auf einen Server eines Dritten hoch, bleibt also aus, sofern du ihn nicht anforderst.

Installieren und generieren

Es gibt kein Entwurfszeitpaket zu installieren, die Installation ist daher kürzer als bei den anderen Produkten.

1. Entpacken

Entpacke den Download in einen Ordner, unten {$DIR} genannt. Du erhältst Demos\, Bin\ und Source\.

2. Bibliothekspfad

Tools, Optionen, Bibliothek. Füge {$DIR}\Source hinzu, damit die generierten Units und die Client-Basisklasse aufgelöst werden. In die IDE muss nichts installiert werden.

3. Optional, ein vorgefertigtes SDK kompilieren

Wenn du eines der mitgelieferten SDKs willst, öffne das passende Laufzeitpaket unter {$DIR}\Packages\ und kompiliere es. Es sind Laufzeitpakete, du kompilierst sie also, statt sie zu installieren.

4. Einen Client generieren

Starte Bin\sgcOpenAPI.exe für den Assistenten oder nutze die Kommandozeile. Eine Eingabe, eine Ausgabe, und du hast eine Unit.

5. Die Unit zu deinem Projekt hinzufügen

Lege die generierte .pas neben deine anderen Units, füge sie dem Projekt hinzu und nimm sie in deine Uses-Klausel auf. Das ist die gesamte Integration.

Spezifikation hinein, funktionierender Client heraus

Eine Kommandozeile generiert die Unit. Ein Aufruf verwendet sie. Der dritte Tab zeigt die Schalter, die am ersten Tag sinnvoll sind.

command line
> sgcOpenAPI.exe -i "geolocation.json" -o "geolocation.pas"

File successfully created geolocation.pas

Beide Schalter sind Pflicht. -i nimmt eine lokale Datei oder eine URL entgegen und akzeptiert JSON und YAML, und -o ist die zu schreibende Pascal-Unit. Wenn du lieber klickst, gibt es in derselben ausführbaren Datei einen GUI-Assistenten. Füge die generierte .pas deinem Projekt hinzu, und sie ist einsatzbereit.

fGeolocation.pas
uses
  geolocation;   // the unit you just generated

procedure TfrmGeolocation.btnGeolocationClick(Sender: TObject);
var
  oResponse: TsgcOpenAPI_Retrieve_the_location_of_an_IP_address_Response;
begin
  oResponse := GetOpenAPIClient.Retrieve_the_location_of_an_IP_address(
    txtAPIKey.Text, txtIPAddress.Text);
  try
    if oResponse.IsSuccessful then
      memoResponse.Lines.Text :=
        'country: ' + oResponse.Successful.Country + #13#10 +
        'city: ' + oResponse.Successful.City
    else
      memoResponse.Lines.Text := oResponse.ResponseError;
  finally
    oResponse.Free;
  end;
end;

GetOpenAPIClient wird in die Unit generiert und nimmt keine Parameter entgegen. Eine Methode je Operation, benannt nach der Operation-ID. Das Response-Objekt musst du selbst freigeben, weshalb die Demo ein try finally verwendet. Unter Delphi-Versionen vor XE7 liefert die generierte Methode stattdessen einen einfachen String, und die mitgelieferte Demo sichert den typisierten Pfad mit {$IF CompilerVersion >= 28.0} ab.

command line
-s              generate a server stub instead of a client
-a 3            add an OAuth2 flow to the generated client
                (0 none, 1 basic, 2 token, 3 oauth2, 4 jwt)
-u <url>        set the base url the generated client uses
-m 1            name methods from summary rather than operationid
                (0 operationid, 1 summary, 2 endpoint)
-x <list|file>  exclude operations, as "VERB endpoint"
-p              generate only the classes the kept operations use
-nc             do not create pascal classes
-l              show progress messages (errors are always shown)
-user -password activate the licence on this machine

Bei einer großen Spezifikation machen -x und -p zusammen den Unterschied zwischen einer Unit, die du in der IDE öffnen kannst, und einer, die du nicht öffnen kannst. -r gibt es ebenfalls, und es ist absichtlich standardmäßig aus, weil es die gesamte Spezifikation an einen Konverter eines Dritten hochlädt.

Der Generierungsbefehl ist die Aufrufzeile aus der eigenen Hilfe des Werkzeugs. Der Aufruf ist die mitgelieferte Demo Demos\20.Client\abstractapi.com\geolocation\fGeolocation.pas, wobei die Formularsteuerelemente durch Literale ersetzt wurden. Diese Demo liefert die Spezifikation mit und erwartet, dass du die Unit generierst, weshalb der Schnellstart mit dem Generator beginnt.

Prüfen, ob der Generator erfolgreich war

Zwei Dinge zum Ansehen, und eines davon lässt sich skripten.

Die Meldung

Das Werkzeug gibt File successfully created gefolgt vom Ausgabepfad aus. Fehler gehen immer auf die Standardfehlerausgabe, ein stiller Lauf, der nichts geschrieben hat, ist also nicht wirklich still.

Der Exit-Code

0 Erfolg, 1 Fehler, 2 ungültige Lizenz, 3 ungültiger Schalter, 4 ungültige Konfigurationsdatei, 5 ungültige Eingabedatei, 6 ungültige Ausgabedatei, 7 die Spezifikation konnte nicht in ein gültiges OpenAPI-3-Dokument umgewandelt werden. Teste ihn in deinem Build-Skript.

Die Unit kompiliert

Füge die generierte .pas dem Projekt hinzu und baue. Sie sollte allein mit {$DIR}\Source im Bibliothekspfad kompilieren.

IsSuccessful

Zur Laufzeit sagt es dir das Response-Objekt. Ist es false, enthält ResponseError die Meldung und ResponseCode den HTTP-Status.

Was beim ersten Mal meistens schiefgeht

Sechs Probleme erklären fast jeden ersten Lauf.

Du suchst eine Komponente in der Palette

Es gibt keine. sgcOpenAPI registriert keine Komponenten und liefert kein Entwurfszeitpaket. Die generierte Unit ist der Integrationspunkt, und GetOpenAPIClient ist der Weg zum Client.

Die in der Demo genannte Unit existiert nicht

Das ist zu erwarten. Die Demos liefern die Spezifikation und nicht die generierte Unit, du führst also zuerst den Generator aus. Die Geolocation-Demo braucht eine Unit namens geolocation, die aus geolocation.json entsteht.

Exit-Code 2

Die Lizenz wurde auf diesem Rechner nicht aktiviert. Übergib -user und -password auf der Kommandozeile.

Das typisierte Response-Objekt lässt sich nicht kompilieren

Typisierte Responses brauchen XE7 oder höher. Die mitgelieferte Demo sichert sie mit {$IF CompilerVersion >= 28.0} ab und fällt bei älteren Compilern auf eine Methode zurück, die einen einfachen String liefert. Behalte diesen Guard, wenn du Delphi 7 unterstützt.

Unter C++Builder kompiliert nichts

SGC_HTTP_OPENAPI wird innerhalb eines {$IFNDEF BCB} in Zeile 702 der sgcVer.inc des Produkts definiert, die Basisklasse des generierten Clients wird für C++Builder also gar nicht kompiliert.

Die Spezifikation lässt sich nicht umwandeln

Exit-Code 7 bedeutet, dass das Dokument nicht in ein gültiges OpenAPI-3-Dokument umgewandelt werden konnte. YAML und Swagger 2.0 werden lokal verarbeitet, der Remote-Konverter hinter -r ist die Notlösung, und er lädt die gesamte Datei auf einen Server hoch, den eSeGeCe nicht kontrolliert.

Über den ersten Client hinaus

Vier Richtungen, alle mit demselben Generator.

Einen Server statt eines Clients generieren

Übergib -s, und der Generator erzeugt stattdessen einen Server-Stub. Die Server-Demos zeigen, wie die erzeugten Operationen verteilt und gegen die Spezifikation validiert werden.

sgcOpenAPI Server

Die vorgefertigten SDKs verwenden

Mehr als tausend Spezifikationen sind bereits generiert und werden mitgeliefert, darunter AWS, Azure, Google und Microsoft. Kompiliere das gewünschte Paket und überspringe den Generierungsschritt ganz.

Die mitgelieferten APIs

Das Generierte zuschneiden

-x schließt Operationen nach Verb und Endpunkt aus, und -p beschneidet die Klassen, die keine verbleibende Operation mehr verwendet. Bei einer großen Spezifikation ist das der Unterschied zwischen einer Unit, die du öffnen kannst, und einer, die du nicht öffnen kannst.

Der Parser

Authentifizierung einbinden

Der generierte Client hat eine Eigenschaft Authentication, und -a wählt das Schema zur Generierungszeit: none, basic, token, OAuth2 oder JWT.

sgcOpenAPI-Funktionen

Referenz, Demos und Dokumentation

Die Demo-Projekte liegen im Download unter Demos\: vorgefertigte SDKs, ein generierter Client und zwei Server-Beispiele.

Was sgcOpenAPI leistet Der Parser, der Generator und die Server-Komponente auf einer Seite.
Der Parser Wie eine Spezifikation gelesen, validiert und in Pascal-Typen umgewandelt wird.
Die Server-Komponente Eine API aus einer Spezifikation bereitstellen, statt sie zu nutzen.
Mitgelieferte APIs Die vorgefertigten SDKs, die kompilierbereit mitgeliefert werden.
Testversion herunterladen Der Generator und der Quellcode, zeitlich begrenzt.
Was ist OpenAPI Hintergrund, falls dir das Spezifikationsformat selbst neu ist.

Zum Weiterlesen: einen Delphi-Client aus OpenAPI generieren, Schemas bündeln, sgcOpenAPI im Vergleich mit swagger-codegen und der OpenAPI-Server. Jedes Produkt hat einen eigenen Schnellstart, aufgelistet auf der Seite Erste Schritte.

Fragen zum sgcOpenAPI-Schnellstart

Keine. sgcOpenAPI ist ein Codegenerator und eine Laufzeitbibliothek und registriert nichts in der IDE-Palette. Das Produkt enthält überhaupt kein Entwurfszeitpaket. Du führst sgcOpenAPI.exe gegen eine Spezifikation aus, es schreibt eine Pascal-Unit, und du fügst diese Unit deinem Projekt hinzu. Darin liefert GetOpenAPIClient ein einsatzbereites Client-Objekt mit einer Methode je Operation.
Das Werkzeug gibt sie in seiner eigenen Hilfe aus: sgcOpenAPI.exe -i "c:\openapi.json" -o "c:\openapi.pas". Beide Schalter sind Pflicht. -i nimmt eine lokale Datei oder eine URL entgegen, JSON und YAML werden beide akzeptiert. -o ist die zu schreibende Pascal-Unit. Ein Wert kann auch nach einem Doppelpunkt angehängt werden, wie in -i:"c:\openapi.json".
Auf zwei Wegen. Das Werkzeug gibt File successfully created gefolgt vom Ausgabepfad aus und setzt einen Exit-Code, den du in einem Build-Skript testen kannst. Die Codes sind 0 Erfolg, 1 Fehler, 2 ungültige Lizenz, 3 ungültiger Schalter, 4 ungültige Konfigurationsdatei, 5 ungültige Eingabedatei, 6 ungültige Ausgabedatei und 7 die Spezifikation konnte nicht in ein gültiges OpenAPI-3-Dokument umgewandelt werden. Fehler gehen immer auf die Standardfehlerausgabe.
Die generierte Methode liefert ein von TsgcOpenAPIResponse abgeleitetes Response-Objekt. Lies zuerst IsSuccessful. Ist es false, enthält ResponseError die Meldung und ResponseCode den HTTP-Status. Gib das Response-Objekt frei, wenn du damit fertig bist, was die mitgelieferte Demo in einem try finally tut.
Der generierte Client nicht. SGC_HTTP_OPENAPI, das das gesamte Interface von sgcHTTP_OpenAPI_Client.pas umschließt, wird innerhalb eines {$IFNDEF BCB} in Zeile 702 der sgcVer.inc des Produkts definiert, sodass diese Unit unter C++Builder zu nichts kompiliert wird und der generierte Code keine Basisklasse hat. Generiere für Delphi.
Der generierte Code zielt auf Delphi 7 und höher. Die typisierten Response-Objekte brauchen XE7 oder höher, und die mitgelieferte Demo macht das mit {$IF CompilerVersion >= 28.0} explizit: oberhalb der Grenze erhältst du ein Response-Objekt mit typisierten Feldern, darunter liefert dieselbe Methode einen einfachen String. Behalte den Guard, wenn dein Projekt auf beiden bauen muss.
Ja. Übergib -s, und der Generator erzeugt statt eines Clients einen Server-Stub mit Code-First-Attributen. Der als sgcOpenAPI ausgelieferte Build definiert SGC_HTTP_OPENAPI_SERVER in Zeile 11 seiner sgcVer.inc, die Serverseite ist also in jeder Lizenz vorhanden. Zwei Server-Demos liegen unter Demos\30.Server.
Nicht, wenn du es nicht anforderst. YAML wird lokal gelesen, und ein Swagger-2.0-Dokument wird lokal in OpenAPI 3 umgewandelt. Der Schalter -r, der standardmäßig aus ist, erlaubt einen Fallback auf den öffentlichen Konverter unter converter.swagger.io, und der Hilfetext sagt klar, dass dabei die vollständige Datei auf einen Server hochgeladen wird, den eSeGeCe nicht kontrolliert. Lass ihn bei allem Vertraulichen aus.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, keine REST-Clients mehr von Hand zu schreiben?

Lade die Testversion herunter und generiere einen Client aus einer Spezifikation, die du bereits hast.