Servidor OpenAPI
Hospede uma API REST OpenAPI 3 diretamente dentro de um servidor HTTP Delphi. Spec-first ou code-first, com Swagger UI automático, validação de requisições e CORS — a especificação se torna a única fonte da verdade.
Hospede uma API REST OpenAPI 3 diretamente dentro de um servidor HTTP Delphi. Spec-first ou code-first, com Swagger UI automático, validação de requisições e CORS — a especificação se torna a única fonte da verdade.
Um servidor de API plug-and-play que se conecta ao TsgcWebSocketHTTPServer, carrega uma especificação OpenAPI 3 (ou gera uma a partir de classes Pascal anotadas) e despacha as requisições recebidas pelo operationId.
TsgcWSAPIServer_OpenAPI
Windows, macOS, Linux, iOS, Android
Enterprise
Crie o componente, carregue (ou gere) uma especificação, conecte-a a um servidor HTTP. O componente faz o match das rotas, valida as entradas e serve o Swagger UI em /docs automaticamente.
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;
Duas formas de definir uma API, quatro hooks de pipeline, validação contra a especificação e uma página Swagger UI servida pelo próprio componente.
Carregue um documento OpenAPI 3 existente com LoadFromFile ou LoadFromString. Rotas, parâmetros e schemas são analisados e tornam-se o contrato que seu servidor deve honrar — altere o JSON, reinicie, pronto.
Anote classes Pascal com atributos sgcHttpGet / sgcRoute / sgcFromPath / sgcResponse; o TsgcOpenAPICodeFirstScanner percorre o RTTI e emite a especificação em tempo de execução — sem JSON para escrever à mão.
Ative OpenAPIOptions.Endpoint.ServeSwaggerUI e o servidor publica uma página interativa de testes em /docs, alimentada por /openapi.json — sem build separado de documentação, sem exportação estática.
Valida o corpo, a query string, parâmetros de caminho e campos obrigatórios contra os schemas da especificação. Em caso de falha, OnValidationError fornece a lista completa de erros e uma flag Continue para rejeitar ou prosseguir.
Defina OpenAPIOptions.CORS.Enabled := True e o servidor responde ao preflight OPTIONS em cada rota, aplicando sua política AllowOrigins / AllowHeaders / AllowMethods.
TsgcOpenAPIServerContext expõe PathParamAs*, QueryParamAs*, HeaderValue, BodyAsString / BodyAsJSON além de RespondJSON e um RespondError no estilo RFC 7807.
OnBeforeRequest, OnAfterRequest, OnAuthenticate e OnException envolvem o handler principal OnRequest — faça short-circuit, logue, autentique ou remapeie exceções sem criar subclasses.
OpenAPIOptions.Endpoint.BasePath antepõe um prefixo a cada rota e aos endpoints integrados /openapi.json e /docs, para que a API possa viver atrás de /api/v1 ou qualquer namespace que você quiser.
sgcRequired, sgcMinLength, sgcMaxLength, sgcRange e sgcPattern emitem as restrições de schema correspondentes para que as mesmas regras apareçam na especificação gerada e sejam aplicadas em tempo de execução.
Fontes oficiais para os protocolos e formatos que este componente implementa.
Acesse diretamente a referência do componente, baixe os projetos de demonstração prontos para executar e obtenha a versão de avaliação.
| Ajuda online — Servidor OpenAPI Referência completa de propriedades, métodos e eventos deste componente. | Abrir | |
| Projetos de demonstração — Demos\23.OpenAPI Dois exemplos prontos para executar: spec-first (JSON do Petstore) e code-first (gerenciador de tarefas). Acompanham o pacote sgcWebSockets — baixe a versão de avaliação abaixo. | Abrir | |
| Manual do usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca. | Abrir |