OpenAPI-Server
Hoste eine OpenAPI-3-REST-API direkt in einem Delphi-HTTP-Server. Spec-first oder Code-first, mit automatischer Swagger UI, Request-Validierung und CORS — die Spezifikation wird zur einzigen Quelle der Wahrheit.
Hoste eine OpenAPI-3-REST-API direkt in einem Delphi-HTTP-Server. Spec-first oder Code-first, mit automatischer Swagger UI, Request-Validierung und CORS — die Spezifikation wird zur einzigen Quelle der Wahrheit.
Ein einsatzbereiter API-Server, der sich in TsgcWebSocketHTTPServer einklinkt, eine OpenAPI-3-Spezifikation lädt (oder aus annotierten Pascal-Klassen erzeugt) und eingehende Requests anhand der operationId weiterleitet.
TsgcWSAPIServer_OpenAPI
Windows, macOS, Linux, iOS, Android
Enterprise
Komponente erstellen, Spezifikation laden (oder erzeugen), an einen HTTP-Server hängen. Die Komponente ordnet Routen zu, validiert Eingaben und liefert Swagger UI automatisch unter /docs aus.
uses
sgcWebSocket, sgcWebSocket_Server_API_OpenAPI,
sgcHTTP_OpenAPI_Server;
var
Server: TsgcWebSocketHTTPServer;
OpenAPI: TsgcWSAPIServer_OpenAPI;
begin
Server := TsgcWebSocketHTTPServer.Create(nil);
Server.Port := 8080;
OpenAPI := TsgcWSAPIServer_OpenAPI.Create(nil);
OpenAPI.OnRequest := HandleRequest;
OpenAPI.OpenAPIOptions.Endpoint.ServeSwaggerUI := True;
OpenAPI.OpenAPIOptions.Validation.ValidateRequest := True;
OpenAPI.OpenAPIOptions.CORS.Enabled := True;
OpenAPI.LoadFromFile('petstore.json');
OpenAPI.Server := Server;
Server.Active := True;
// Swagger UI: http://localhost:8080/docs
// Raw spec: http://localhost:8080/openapi.json
end;
procedure THost.HandleRequest(Sender: TObject;
const aOperationId: string;
const aContext: TsgcOpenAPIServerContext;
var Handled: Boolean);
begin
Handled := True;
if aOperationId = 'getPetById' then
aContext.RespondJSON(200, PetAsJSON(aContext.PathParamAsInteger('petId')))
else
Handled := False;
end;
uses
sgcWebSocket_Server_API_OpenAPI,
sgcHTTP_OpenAPI_Server_CodeFirst;
type
[sgcServiceContract('Task Manager', '', '1.0.0')]
[sgcRoute('/api/v1')]
TTaskService = class
public
[sgcHttpGet] [sgcRoute('/tasks/{taskId}')]
[sgcSummary('Get a task by ID')]
[sgcResponse(200, 'The requested task')]
[sgcResponse(404, 'Task not found')]
procedure GetTask([sgcFromPath][sgcRequired] const taskId: Integer); virtual;
end;
// Generate the spec from RTTI and feed it to the component:
var
Scanner: TsgcOpenAPICodeFirstScanner;
begin
Scanner := TsgcOpenAPICodeFirstScanner.Create;
try
OpenAPI.LoadFromString(Scanner.GenerateSpec(TTaskService));
finally
Scanner.Free;
end;
OpenAPI.Server := Server;
Server.Active := True;
end;
Zwei Möglichkeiten, eine API zu definieren, vier Pipeline-Hooks, Validierung gegen die Spezifikation und eine Swagger-UI-Seite, die die Komponente selbst ausliefert.
Lade ein bestehendes OpenAPI-3-Dokument mit LoadFromFile oder LoadFromString. Routen, Parameter und Schemas werden geparst und bilden den Vertrag, den dein Server einhalten muss — JSON ändern, neu starten, fertig.
Versehe Pascal-Klassen mit den Attributen sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse; TsgcOpenAPICodeFirstScanner durchläuft die RTTI und erzeugt die Spezifikation zur Laufzeit — kein JSON von Hand zu schreiben.
Aktiviere OpenAPIOptions.Endpoint.ServeSwaggerUI, und der Server veröffentlicht eine interaktive Try-it-out-Seite unter /docs, gespeist von /openapi.json — kein separater Docs-Build, kein statischer Export.
Validiert Body, Query-String, Pfad-Parameter und Pflichtfelder gegen die Schemas der Spezifikation. Im Fehlerfall liefert OnValidationError die vollständige Fehlerliste und ein Continue-Flag, um abzulehnen oder fortzufahren.
Setze OpenAPIOptions.CORS.Enabled := True, und der Server beantwortet Preflight-OPTIONS auf jeder Route und wendet deine Richtlinien für AllowOrigins / AllowHeaders / AllowMethods an.
TsgcOpenAPIServerContext stellt PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON sowie RespondJSON und ein RespondError im Stil von RFC 7807 bereit.
OnBeforeRequest, OnAfterRequest, OnAuthenticate und OnException umschließen den Hauptbehandler OnRequest — abkürzen, protokollieren, authentifizieren oder Exceptions umleiten, ohne Unterklassen zu bilden.
OpenAPIOptions.Endpoint.BasePath stellt jeder Route sowie den eingebauten Endpunkten /openapi.json & /docs ein Präfix voran, sodass die API hinter /api/v1 oder einem beliebigen anderen Namensraum liegen kann.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange und sgcPattern erzeugen die passenden Schema-Constraints, sodass dieselben Regeln in der erzeugten Spezifikation erscheinen und zur Laufzeit erzwungen werden.
Maßgebliche Quellen für die Protokolle und Formate, die diese Komponente implementiert.
Springe direkt zur Komponentenreferenz, hole dir die fertigen Demoprojekte und lade die Testversion herunter.
| Online-Hilfe — OpenAPI-Server Vollständige Referenz für Eigenschaften, Methoden und Ereignisse dieser Komponente. | Öffnen | |
| Demoprojekte — Demos\23.OpenAPI Zwei einsatzbereite Beispiele: Spec-first (Petstore-JSON) und Code-first (Task-Manager). Im sgcWebSockets-Paket enthalten — lade die Testversion unten herunter. | Öffnen | |
| Benutzerhandbuch (PDF) Umfassendes Handbuch zu jeder Komponente der Bibliothek. | Öffnen |