Serveur OpenAPI
Héberge une API REST OpenAPI 3 directement à l'intérieur d'un serveur HTTP Delphi. Spec-first ou code-first, avec Swagger UI automatique, validation des requêtes et CORS — la spec devient l'unique source de vérité.
Héberge une API REST OpenAPI 3 directement à l'intérieur d'un serveur HTTP Delphi. Spec-first ou code-first, avec Swagger UI automatique, validation des requêtes et CORS — la spec devient l'unique source de vérité.
Un serveur d'API prêt à l'emploi qui se branche sur TsgcWebSocketHTTPServer, charge une spec OpenAPI 3 (ou en génère une à partir de classes Pascal annotées) et dispatche les requêtes entrantes par operationId.
TsgcWSAPIServer_OpenAPI
Windows, macOS, Linux, iOS, Android
Enterprise
Crée le composant, charge (ou génère) une spec, attache-le à un serveur HTTP. Le composant fait correspondre les routes, valide les entrées et sert Swagger UI sur /docs automatiquement.
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;
Deux façons de définir une API, quatre hooks de pipeline, validation par rapport à la spec et une page Swagger UI servie par le composant lui-même.
Charge un document OpenAPI 3 existant avec LoadFromFile ou LoadFromString. Les routes, paramètres et schémas sont analysés et deviennent le contrat que ton serveur doit honorer — modifie le JSON, redémarre, c'est fait.
Annote des classes Pascal avec les attributs sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse ; TsgcOpenAPICodeFirstScanner parcourt la RTTI et émet la spec à l'exécution — aucun JSON à écrire à la main.
Active OpenAPIOptions.Endpoint.ServeSwaggerUI et le serveur publie une page interactive "try-it-out" sur /docs, alimentée par /openapi.json — pas de build de docs séparé, pas d'export statique.
Valide le corps, la chaîne de requête, les paramètres de chemin et les champs obligatoires par rapport aux schémas de la spec. En cas d'échec, OnValidationError te fournit la liste complète des erreurs et un drapeau Continue pour rejeter ou poursuivre.
Définis OpenAPIOptions.CORS.Enabled := True et le serveur répond aux préflights OPTIONS sur chaque route, en appliquant ta politique AllowOrigins / AllowHeaders / AllowMethods.
TsgcOpenAPIServerContext expose PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON ainsi que RespondJSON et un RespondError de style RFC 7807.
OnBeforeRequest, OnAfterRequest, OnAuthenticate et OnException encadrent le gestionnaire principal OnRequest — court-circuite, journalise, authentifie ou remappe les exceptions sans sous-classer.
OpenAPIOptions.Endpoint.BasePath ajoute un préfixe à chaque route ainsi qu'aux endpoints intégrés /openapi.json & /docs, de sorte que l'API peut vivre derrière /api/v1 ou n'importe quel namespace de ton choix.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange et sgcPattern émettent les contraintes de schéma correspondantes pour que les mêmes règles apparaissent dans la spec générée et soient appliquées à l'exécution.
Sources faisant autorité pour les protocoles et formats que ce composant implémente.
Liens directs vers la référence du composant, projets de démonstration prêts à l'emploi et téléchargement de l'essai.
| Aide en ligne — Serveur OpenAPI Référence complète des propriétés, méthodes et événements de ce composant. | Ouvrir | |
| Projets de démonstration — Demos\23.OpenAPI Deux exemples prêts à l'emploi : spec-first (Petstore JSON) et code-first (gestionnaire de tâches). Livrés dans le package sgcWebSockets — télécharge l'essai ci-dessous. | Ouvrir | |
| Manuel utilisateur (PDF) Manuel exhaustif couvrant chaque composant de la bibliothèque. | Ouvrir |