Cliente Delphi para a REST API do GitHub via sgcOpenAPI

O GitHub mantém a maior descrição OpenAPI publicamente disponível — mais de 1.000 endpoints cobrindo repositórios, issues, pull requests, actions, checks, packages e o gateway GraphQL. Forneça ao sgcOpenAPI e gere uma unit Delphi tipada que sua aplicação pode usar para dirigir qualquer fluxo do GitHub que a REST API exponha.

GitHub + sgcOpenAPI

O GitHub publica uma descrição OpenAPI 3 totalmente mantida sob a licença MIT. O sgcOpenAPI faz parse e emite uma única unit Pascal que compila do Delphi 7 ao RAD Studio 13.

Auth

Personal access token, JWT de GitHub App, OAuth

Unit gerada

sgcOpenAPI_GitHub

Plataformas

Windows, macOS, Linux, iOS, Android

Gere o cliente

O GitHub publica duas versões da spec — api.github.com.json para o serviço hospedado público e ghes-3.x.json para o GitHub Enterprise Server. Aponte o parser para a versão alvo.

uses
  sgcOpenAPI_Parser, sgcOpenAPI_Generator;

var
  vParser: TsgcOpenAPIParser;
  vGen: TsgcOpenAPIGenerator;
begin
  vParser := TsgcOpenAPIParser.Create(nil);
  try
    vParser.LoadFromFile('C:\specs\github\api.github.com.json');
    Memo1.Lines.Add(Format('GitHub spec: %d paths, %d schemas',
      [vParser.Paths.Count, vParser.Schemas.Count]));

    vGen := TsgcOpenAPIGenerator.Create(nil);
    try
      vGen.Parser := vParser;
      vGen.OutputUnit := 'sgcOpenAPI_GitHub';
      vGen.OutputFolder := 'C:\Generated\GitHub';
      vGen.GroupBy := gbTag;        // one class per tag
      vGen.Generate;
    finally
      vGen.Free;
    end;
  finally
    vParser.Free;
  end;
end;

O gerador emite uma classe por tag do GitHub — TsgcGitHub_Repos, TsgcGitHub_Issues, TsgcGitHub_Pulls, TsgcGitHub_Actions, TsgcGitHub_Checks, TsgcGitHub_Packages, TsgcGitHub_OrgsAdmin e assim por diante — todas pertencentes a uma fachada de topo TsgcGitHub.

Liste repositórios

Autentique com um personal access token e enumere os repositórios do usuário atual. A paginação é tratada pelo wrapper enumerável gerado — apenas faça for...in sobre o resultado e o cliente busca páginas adicionais sob demanda.

uses sgcOpenAPI_GitHub;

var
  vGH: TsgcGitHub;
  vRepo: TsgcGitHubRepository;
begin
  vGH := TsgcGitHub.Create(nil);
  try
    vGH.Token := 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    vGH.UserAgent := 'sgcDelphi/1.0';

    for vRepo in vGH.Repos.ListForAuthenticatedUser(
      Visibility := 'private', PerPage := 100) do
    begin
      Memo1.Lines.Add(Format('%s — %s',
        [vRepo.FullName, vRepo.Description]));
    end;
  finally
    vGH.Free;
  end;
end;

Crie uma issue e revise um pull request

Duas chamadas curtas — uma que altera estado, outra que lê. Ambas retornam os mesmos objetos fortemente tipados que a spec descreve.

// Create an issue in repo "octocat/Hello-World"
var
  vIssue: TsgcGitHubIssue;
begin
  vIssue := vGH.Issues.Create(
    Owner := 'octocat',
    Repo  := 'Hello-World',
    Title := 'Memory leak in HTTP/2 reader',
    Body  := 'Repro steps: ...',
    Labels := ['bug', 'http2']);
  ShowMessage('Filed issue #' + IntToStr(vIssue.Number));

  // List open PRs and inspect the head ref
  for vPR in vGH.Pulls.List(
    Owner := 'octocat', Repo := 'Hello-World',
    State := 'open', Sort := 'updated') do
  begin
    Memo1.Lines.Add(Format('PR #%d %s — %s',
      [vPR.Number, vPR.Title, vPR.Head.Ref]));
  end;
end;

O que a unit gerada entrega

Cada tag da descrição OpenAPI oficial vira uma classe tipada. Cada parâmetro documentado vira um argumento tipado.

Repositórios & conteúdo

Repos, Git, Contents, Branches, Tags, Releases, Forks. Leia, escreva e exclua arquivos. Crie branches, gerencie regras de proteção, rascunhe e publique releases.

Issues & pull requests

Issues, Pulls, Reviews, Comments, Reactions, Labels, Milestones, Assignees. Toda a superfície de colaboração.

Actions & checks

Actions, WorkflowRuns, WorkflowJobs, Artifacts, Secrets, Variables, Checks, CheckRuns, CheckSuites — construa dashboards ou rode automações sobre dados do GitHub Actions.

Packages & container registry

Packages, PackageVersions — gerencie pacotes npm, NuGet, Maven, RubyGems e de container a partir do Delphi.

Organizações & teams

Orgs, Teams, Members, Memberships, OrgsAdmin para operações exclusivas de owner, como provisionamento SCIM.

GitHub Apps

Apps, Installations, AppManifests — instale GitHub Apps programaticamente e gere installation tokens de curta duração.

Três coisas a observar

Rate limits e requisições condicionais

O GitHub impõe um rate limit por hora (5.000 requisições/hora com token, 60 sem autenticação). O cliente gerado guarda o último ETag de cada resposta GET — reutilize definindo IfNoneMatch na próxima chamada para receber um 304 gratuito.

GitHub Apps precisam de tokens de curta duração

Para instalações de GitHub App você troca um JWT (assinado com a chave privada do seu app) por um installation token de 1 hora. Use o método Apps.CreateInstallationAccessToken e renove o token antes que expire.

Eventos polimórficos de timeline

O endpoint Issues.ListEventsForTimeline retorna uma união discriminada de dezenas de tipos de evento. A unit gerada emite uma classe base e um descendente por variante — faça downcast com base na propriedade Event.

Do blog

Parser OpenAPI Delphi

Como o parser subjacente lida com specs OpenAPI 3.x do mundo real.

Leia o post →

Cliente OpenAPI + parser

O post complementar que apresenta tanto o wrapper de cliente quanto os internos do parser.

Leia o post →

sgcOpenAPI 2026.6

Release notes mais recentes — novas opções de gerador e correções no parser.

Leia o post →

Construa sua automação do GitHub hoje

O sgcOpenAPI entrega o parser, o gerador de código, o servidor OpenAPI e os bundles dos SDKs Amazon, Google, Microsoft e Azure — um produto, três tiers.