Servidor OpenAPI
Aloja una API REST OpenAPI 3 directamente dentro de un servidor HTTP Delphi. Spec-first o code-first, con Swagger UI automático, validación de peticiones y CORS — la especificación se convierte en la única fuente de verdad.
Aloja una API REST OpenAPI 3 directamente dentro de un servidor HTTP Delphi. Spec-first o code-first, con Swagger UI automático, validación de peticiones y CORS — la especificación se convierte en la única fuente de verdad.
Un servidor de API que se conecta directamente a TsgcWebSocketHTTPServer, carga una especificación OpenAPI 3 (o la genera a partir de clases Pascal anotadas) y despacha las peticiones entrantes por operationId.
TsgcWSAPIServer_OpenAPI
Windows, macOS, Linux, iOS, Android
Enterprise
Crea el componente, carga (o genera) una especificación y asóciala a un servidor HTTP. El componente empareja las rutas, valida las entradas y sirve Swagger UI en /docs automáticamente.
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;
Dos formas de definir una API, cuatro hooks de pipeline, validación contra la especificación y una página Swagger UI servida por el propio componente.
Carga un documento OpenAPI 3 existente con LoadFromFile o LoadFromString. Las rutas, parámetros y esquemas se analizan y se convierten en el contrato que tu servidor debe respetar — cambia el JSON, reinicia, listo.
Anota clases Pascal con los atributos sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse; TsgcOpenAPICodeFirstScanner recorre el RTTI y emite la especificación en tiempo de ejecución — sin JSON que escribir a mano.
Activa OpenAPIOptions.Endpoint.ServeSwaggerUI y el servidor publica una página interactiva de prueba en /docs, alimentada por /openapi.json — sin compilación de documentación aparte ni exportación estática.
Valida el cuerpo, la cadena de consulta, los parámetros de ruta y los campos requeridos contra los esquemas de la especificación. Si falla, OnValidationError te entrega la lista completa de errores y un flag Continue para rechazar o continuar.
Asigna OpenAPIOptions.CORS.Enabled := True y el servidor responde al preflight OPTIONS en cada ruta, aplicando tu política AllowOrigins / AllowHeaders / AllowMethods.
TsgcOpenAPIServerContext expone PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON además de RespondJSON y un RespondError al estilo RFC 7807.
OnBeforeRequest, OnAfterRequest, OnAuthenticate y OnException envuelven al manejador principal OnRequest — corta el flujo, registra, autentica o remapea excepciones sin tener que crear subclases.
OpenAPIOptions.Endpoint.BasePath antepone un prefijo a cada ruta y a los endpoints integrados /openapi.json y /docs, de modo que la API puede vivir detrás de /api/v1 o cualquier espacio de nombres que prefieras.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange y sgcPattern emiten las restricciones de esquema correspondientes para que las mismas reglas aparezcan en la especificación generada y se apliquen en tiempo de ejecución.
Fuentes autorizadas para los protocolos y formatos que implementa este componente.
Accede a la referencia del componente, descarga los proyectos de demo listos para ejecutar y prueba la versión de evaluación.
| Ayuda en línea — Servidor OpenAPI Referencia completa de propiedades, métodos y eventos de este componente. | Abrir | |
| Proyectos de demo — Demos\23.OpenAPI Dos ejemplos listos para ejecutar: spec-first (Petstore JSON) y code-first (gestor de tareas). Incluidos en el paquete sgcWebSockets — descarga la versión de evaluación más abajo. | Abrir | |
| Manual de usuario (PDF) Manual integral que cubre cada componente de la librería. | Abrir |