sgcOpenAPI Pare de escrever à mão clientes REST. Especificação entra, Pascal sai.

Aponte o sgcOpenAPI para um documento OpenAPI 3.x. O parser o lê, o gerador emite um SDK nativo em Object Pascal e o componente de servidor OpenAPI publica seus próprios endpoints de volta como uma especificação ativa.

  • OpenAPI 3.0 e 3.1
  • JSON e YAML
  • Swagger 2.0 convertido automaticamente
  • Delphi 7 ao RAD Studio 13
  • C++ Builder
  • 1.195+SDKs de nuvem prontos, gerados a partir das especificações oficiais
  • 280+Serviços Amazon AWS
  • 650+Serviços Microsoft Azure
  • 250+Serviços Google Cloud
  • 15+SDKs Microsoft Graph
Veja rodando

Veja o sgcOpenAPI em dois minutos.

Uma especificação entra, Pascal sai, e um servidor em qualquer uma das pontas. Narrado e legendado. Nada é baixado até você pressionar play.

Início rápido do sgcOpenAPI

Transforme uma especificação em código Delphi e transforme código Delphi em um servidor em execução.

  1. Gere um clienteInforme à linha de comando uma especificação de entrada e um arquivo Pascal de saída. A entrada pode ser um arquivo ou uma URL, em JSON ou YAML.
  2. O que saiPascal comum: cada operação vira um método, cada schema vira uma classe. Adicione -s para obter um esqueleto de servidor.
  3. Servidor Spec-FirstCrie o TsgcWSAPIServer_OpenAPI, chame LoadFromFile, trate OnRequest, atribua-o ao seu servidor e ative-o.
  4. Servidor Code-FirstAnote uma classe Delphi com atributos e a especificação é gerada a partir da classe na inicialização.
  5. ValidaçãoAtive ValidateRequest e ValidateRequestBody e uma requisição que não corresponde à especificação nunca chega ao seu código.
Biblioteca de SDKs prontos

Quatro nuvens, já em Pascal.

Você não precisa gerar nada para começar. As quatro maiores plataformas de nuvem acompanham o sgcOpenAPI como SDKs Pascal prontos para uso, gerados a partir das especificações oficiais e mantidos atualizados.

Amazon AWS, mais de 280 serviços

SDKs de serviços REST que cobrem S3, EC2, Lambda, DynamoDB, SQS, SNS, CloudFormation e mais. Adicione a unit ao projeto e chame o serviço com classes tipadas de requisição e resposta.

Ver SDKs da AWS →

Microsoft Azure, mais de 650 serviços

O maior conjunto da biblioteca. VMs do Azure, Blob Storage, Functions, Cosmos DB, Key Vault e o restante do plano de controle do Azure, cada um um cliente Pascal gerado.

Ver SDKs do Azure →

Google Cloud, mais de 250 serviços

Compute Engine, Cloud Storage, BigQuery, Pub/Sub, Cloud Functions e mais.

Ver SDKs do Google →

Microsoft Graph, mais de 15 SDKs

Office 365, Microsoft Teams, OneDrive, Outlook e Active Directory, por meio da API Graph.

Ver SDKs da Microsoft →

Qualquer outra especificação

Se a API publica um documento OpenAPI ou Swagger, o gerador o transforma no mesmo tipo de unit Pascal tipada. Não há lista de permissões.

Recursos do gerador →

Todos os níveis, tudo incluído

Single, Team e Site incluem o parser, o gerador de código, o componente de servidor OpenAPI e toda a biblioteca de SDKs prontos. Nada é vendido separadamente.

Todos os SDKs prontos →

Guias práticos, de uma especificação pública a um cliente Delphi que compila

O pipeline

Especificação entra, código que compila sai.

Cinco passos, todos dentro da IDE. Sem Node.js, sem gerador de código em Java, sem mecanismo de templates para aprender.

# one input, one output, and you have a unit
> sgcOpenAPI.exe -i "api.github.com.json" -o "github.pas" -a 2

File successfully created github.pas

# -a 2 wires up token auth   -u sets the base url
# -x drops operations        -p prunes the classes they used
# -s emits a server stub instead of a client
# exit 0 ok, 5 bad input, 6 bad output, 7 not convertible
uses
  github;  // the unit you just generated

procedure TForm1.btnReposClick(Sender: TObject);
var
  oResponse: TsgcOpenAPI_reposlistforauthenticateduser_Response;
  oRepo: TsgcOpenAPI_repository_Class;
begin
  GetOpenAPIClient.Authentication.Token.BearerToken := 'ghp_...';

  oResponse := GetOpenAPIClient.reposlistforauthenticateduser(
    'private', 'owner', 'all', 'full_name', '', 100, 1);
  try
    if oResponse.IsSuccessful then
      for oRepo in oResponse.Successful.Items do
        Memo1.Lines.Add(oRepo.Full_name)
    else
      Memo1.Lines.Add(IntToStr(oResponse.ResponseCode) + ' ' +
        oResponse.ResponseError);
  finally
    oResponse.Free;
  end;
end;
uses
  sgcHTTP_Server, sgcHTTP_OpenAPI_Server, sgcWebSocket_Server_API_OpenAPI;

procedure TForm1.btnStartClick(Sender: TObject);
begin
  FServer := TsgcHTTPServer.Create(Self);
  FServer.Port := 8080;

  FOpenAPI := TsgcWSAPIServer_OpenAPI.Create(Self);
  FOpenAPI.OpenAPIOptions.Endpoint.ServeSpec := True;
  FOpenAPI.OpenAPIOptions.Endpoint.ServeSwaggerUI := True;
  FOpenAPI.OpenAPIOptions.Validation.ValidateRequest := True;
  FOpenAPI.LoadFromFile('petstore.json');
  FOpenAPI.OnRequest := OnOpenAPIRequest;
  FOpenAPI.Server := FServer;

  FServer.Active := True;
end;

// one event, dispatched by operation id
procedure TForm1.OnOpenAPIRequest(Sender: TObject;
  const aOperationId: string;
  const aContext: TsgcOpenAPIServerContext;
  var Handled: Boolean);
begin
  Handled := True;
  if aOperationId = 'getPetById' then
    aContext.RespondJSON(200,
      FPets.Values[aContext.PathParamAsString('petId')])
  else
    Handled := False;
end;
  1. Aponte para uma especificaçãoAponte -i para um arquivo local ou uma URL, em JSON ou YAML. Ambos são lidos localmente, e um documento Swagger 2.0 também é convertido para OpenAPI 3 localmente.
  2. AnaliseTsgcOpenAPI lê o documento em Paths, Components, Security, Servers, Tags e Info, e registra tudo o que não conseguiu atender em Warnings. Ponteiros $ref externos são incorporados antes por TsgcOpenAPI_Bundle.
  3. GereTsgcOpenAPI_Parser_Client_Pascal descende desse leitor e escreve uma unit Pascal: um método por operação, uma classe de resposta por método e uma classe para cada schema, com as descrições do documento como comentários.
  4. CompileAdicione a unit gerada ao projeto e inclua-a em uma cláusula uses. Nada mais precisa estar no library path além da pasta Source do sgcOpenAPI, do Delphi 7 ao RAD Studio 13. Respostas tipadas exigem XE7 ou posterior.
  5. ChameChame GetOpenAPIClient, defina as credenciais em Authentication, e chame a operação. A URL base já vem embutida a partir da entrada servers do documento.

O gerador descende do leitor, então você também pode criar o TsgcOpenAPI por conta própria, percorrer o modelo analisado e construir sua própria ferramenta sobre ele. O componente parser →

O lado do servidor

Sirva a especificação, não apenas a consuma.

TsgcWSAPIServer_OpenAPI se conecta a um TsgcHTTPServer, roteia as requisições recebidas com base no documento carregado, valida-as antes de executar seu handler e serve o documento e uma Swagger UI pela mesma porta.

Spec-First: uma unit Delphi carrega petstore.json no TsgcWSAPIServer_OpenAPI e a tabela de rotas é construída a partir da especificação.

O que isso oferece

GET /pets/{petId} chega ao seu handler OnRequest com aOperationId definido como getPetById. GET /openapi.json retorna o documento carregado e GET /docs abre a Swagger UI, ambos ativados por Endpoint.ServeSpec e Endpoint.ServeSwaggerUI. Endpoint.BasePath move o par para baixo de um prefixo.

Code-First: uma classe Delphi anotada com os atributos sgcServiceContract, sgcRoute e sgcHttpGet, e o documento OpenAPI gerado a partir dela na inicialização.

Spec-first ou code-first

Carregue um contrato JSON com LoadFromFile e despache pelo id da operação, ou anote uma classe Pascal com sgcServiceContract, sgcHttpGet, sgcRoute e sgcFromBody e deixe o TsgcOpenAPICodeFirstScanner construir o documento. O Code-First exige Delphi XE7 ou posterior. As duas demos estão em Demos\30.Server\.

Validação: requisições que não correspondem à especificação são respondidas com 400 Bad Request antes de o handler OnRequest executar.

Validação antes de o seu handler executar

Validation.ValidateRequest, ValidateRequired e ValidateRequestBody verificam a requisição recebida com base no documento antes de o seu handler executar. OnValidationError entrega o id da operação e a lista de falhas, além de um flag Continue que decide se a requisição é rejeitada.

O contexto da requisição: parâmetros de path, query e corpo já analisados, e o código de resposta, o tipo de conteúdo e o texto definidos no handler.

Autenticação ligada a partir da especificação

As entradas securityScheme do documento acionam OnValidateAPIKey, OnValidateBasic e OnValidateBearer. Você escreve a consulta das credenciais, o componente analisa a requisição e responde com o status correto quando a consulta recusa.

  • API Key
  • HTTP Basic
  • Bearer
  • JWT
  • OAuth2
  • OpenID Connect
  • Swagger UI

O servidor roda no mesmo servidor HTTP do sgcWebSockets que hospeda seus endpoints WebSocket e arquivos estáticos. Uma porta, um certificado TLS, um fluxo de log. O componente de servidor OpenAPI →

Licenciamento

Um produto, três níveis.

Um produto completo para Delphi e C++ Builder: um parser OpenAPI 3.x, um gerador nativo de SDK Pascal, um componente de servidor OpenAPI e mais de 1.195 SDKs de nuvem prontos. Código-fonte completo, distribuição sem royalties. Escolha pelo tamanho da equipe.

Single

Um desenvolvedor. Parser, gerador, componente de servidor e todos os SDKs prontos.

€399 / 1 desenvolvedor

Team

Dois desenvolvedores. O mesmo produto completo do Single.

€649 / 2 desenvolvedores

Site

Desenvolvedores ilimitados. O mesmo produto completo do Single.

€1,099 / desenvolvedores ilimitados

O sgcOpenAPI é licenciado separadamente. Parser, gerador de código, componente de servidor e todos os mais de 1.195 SDKs prontos estão incluídos em todos os níveis.

Compare níveis e preços
DEPOIMENTOS

O Que os Desenvolvedores Dizem

Confiado por desenvolvedores Delphi, C++ Builder, Lazarus e .NET ao redor do mundo.

A biblioteca sgcWebSockets de vocês é muito útil e fácil de configurar. Continuem com o ótimo trabalho!
Simone Moretti Desenvolvedor Delphi
O sgcWebSockets é incrível e o suporte de vocês é o melhor!
Christian Meyer Fundador & CTO
Muito obrigado pela ajuda e pelo suporte, eu adoro os componentes de vocês.
Mark Steinfeld CTO

Gere seu primeiro SDK Pascal hoje.

Parser, gerador de código, componente de servidor OpenAPI e todos os mais de 1.195 SDKs de nuvem prontos, em uma única licença. Código-fonte completo, distribuição sem royalties, do Delphi 7 ao RAD Studio 13.

Mais da eSeGeCe

Outros Produtos da eSeGeCe

O sgcOpenAPI é uma das bibliotecas de componentes da eSeGeCe para Delphi, C++ Builder e .NET. Elas compartilham convenções, acompanham o código-fonte completo e são distribuídas sem royalties.

Pacotes, complementos e mais

Últimas do blog

Ver todas as publicações →

Você está vendo a visão sgcOpenAPI da eSeGeCe.

Mostre outro ângulo →
Garantia de reembolso de 30 diasNão ficou satisfeito? Solicite o reembolso total em até 30 dias após a compra. Ver política de reembolso