OpenAPI Server
Ospita un'API REST OpenAPI 3 direttamente all'interno di un server HTTP Delphi. Spec-first o code-first, con Swagger UI automatica, validazione delle richieste e CORS — la specifica diventa l'unica fonte di verità.
Ospita un'API REST OpenAPI 3 direttamente all'interno di un server HTTP Delphi. Spec-first o code-first, con Swagger UI automatica, validazione delle richieste e CORS — la specifica diventa l'unica fonte di verità.
Un server API drop-in che si collega a TsgcWebSocketHTTPServer, carica una specifica OpenAPI 3 (o ne genera una da classi Pascal annotate) e smista le richieste in arrivo tramite operationId.
TsgcWSAPIServer_OpenAPI
Windows, macOS, Linux, iOS, Android
Enterprise
Crea il componente, carica (o genera) una specifica, collegala a un server HTTP. Il componente abbina le rotte, valida gli input e serve automaticamente Swagger UI su /docs.
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;
Due modi per definire un'API, quattro hook nella pipeline, validazione rispetto alla specifica e una pagina Swagger UI servita dal componente stesso.
Carica un documento OpenAPI 3 esistente con LoadFromFile o LoadFromString. Rotte, parametri e schemi vengono analizzati e diventano il contratto che il tuo server deve rispettare — modifica il JSON, riavvia, fatto.
Annota le classi Pascal con gli attributi sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse; TsgcOpenAPICodeFirstScanner percorre l'RTTI e genera la specifica a runtime — nessun JSON da scrivere a mano.
Attiva OpenAPIOptions.Endpoint.ServeSwaggerUI e il server pubblica una pagina interattiva try-it-out su /docs, alimentata da /openapi.json — nessuna build separata della documentazione, nessun export statico.
Valida il body, la query string, i parametri di path e i campi obbligatori rispetto agli schemi nella specifica. In caso di errore, OnValidationError fornisce l'elenco completo degli errori e un flag Continue per rifiutare o proseguire.
Imposta OpenAPIOptions.CORS.Enabled := True e il server risponde ai preflight OPTIONS su ogni rotta, applicando la tua policy AllowOrigins / AllowHeaders / AllowMethods.
TsgcOpenAPIServerContext espone PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON insieme a RespondJSON e un RespondError in stile RFC 7807.
OnBeforeRequest, OnAfterRequest, OnAuthenticate e OnException avvolgono il gestore principale OnRequest — cortocircuita, registra, autentica o rimappa le eccezioni senza creare sottoclassi.
OpenAPIOptions.Endpoint.BasePath antepone un prefisso a ogni rotta e agli endpoint integrati /openapi.json e /docs, in modo che l'API possa risiedere dietro /api/v1 o qualsiasi namespace tu preferisca.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange e sgcPattern generano i corrispondenti vincoli di schema, così le stesse regole compaiono nella specifica generata e vengono applicate a runtime.
Fonti autorevoli per i protocolli e i formati implementati da questo componente.
Collegamenti diretti al riferimento del componente, progetti demo pronti all'uso e download della versione di prova.
| Guida online — OpenAPI Server Riferimento completo di proprietà, metodi ed eventi per questo componente. | Apri | |
| Progetti demo — Demos\23.OpenAPI Due esempi pronti all'uso: spec-first (Petstore JSON) e code-first (task manager). Inclusi nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto. | Apri | |
| Manuale utente (PDF) Manuale completo che copre ogni componente della libreria. | Apri |