Servidor OpenAPI (TsgcWSAPIServer_OpenAPI) — sgcWebSockets | eSeGeCe

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.

TsgcWSAPIServer_OpenAPI

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.

Clase del componente

TsgcWSAPIServer_OpenAPI

Especificación

OpenAPI 3.0

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Enterprise

Spec-first o code-first — tres líneas en cualquier caso

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;

Qué incluye

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.

Modo spec-first

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.

Modo code-first

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.

Swagger UI integrado

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.

Validación de peticiones

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.

CORS

Asigna OpenAPIOptions.CORS.Enabled := True y el servidor responde al preflight OPTIONS en cada ruta, aplicando tu política AllowOrigins / AllowHeaders / AllowMethods.

Helpers de contexto

TsgcOpenAPIServerContext expone PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON además de RespondJSON y un RespondError al estilo RFC 7807.

Eventos de pipeline

OnBeforeRequest, OnAfterRequest, OnAuthenticate y OnException envuelven al manejador principal OnRequest — corta el flujo, registra, autentica o remapea excepciones sin tener que crear subclases.

Prefijo de ruta base

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.

Atributos de validación (code-first)

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.

Especificaciones y referencias

Fuentes autorizadas para los protocolos y formatos que implementa este componente.

Documentación y demos

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.
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.
Manual de usuario (PDF) Manual integral que cubre cada componente de la librería.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para publicar una API REST documentada?

Descarga la versión de evaluación gratuita y convierte una especificación OpenAPI en un servidor Delphi en funcionamiento — con Swagger UI incluido.