Klient REST API GitHub dla Delphi przez sgcOpenAPI

GitHub utrzymuje największy publicznie dostępny opis OpenAPI — ponad 1000 endpointów obejmujących repozytoria, issues, pull requesty, actions, checks, packages i bramę GraphQL. Wprowadź go do sgcOpenAPI i wyemituj typowaną jednostkę Delphi, której Twoja aplikacja może użyć do napędzania dowolnego przepływu GitHub, który REST API udostępnia.

GitHub + sgcOpenAPI

GitHub dostarcza w pełni utrzymywany opis OpenAPI 3 na licencji MIT. sgcOpenAPI parsuje go i emituje pojedynczą jednostkę Pascala, która kompiluje się na Delphi 7 do RAD Studio 13.

Specyfikacja źródłowa

github/rest-api-description

Auth

Personal access token, JWT GitHub App, OAuth

Wygenerowana jednostka

sgcOpenAPI_GitHub

Platformy

Windows, macOS, Linux, iOS, Android

Wygeneruj klienta

GitHub publikuje dwa warianty specyfikacji — api.github.com.json dla publicznej hostowanej usługi i ghes-3.x.json dla GitHub Enterprise Server. Wskaż parser na ten, który celujesz.

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;

Generator emituje jedną klasę na tag GitHub — TsgcGitHub_Repos, TsgcGitHub_Issues, TsgcGitHub_Pulls, TsgcGitHub_Actions, TsgcGitHub_Checks, TsgcGitHub_Packages, TsgcGitHub_OrgsAdmin itp. — wszystkie posiadane przez fasadę najwyższego poziomu TsgcGitHub.

Listuj repozytoria

Uwierzytelnij się tokenem personal access, potem wylicz repozytoria bieżącego użytkownika. Paginacja jest obsługiwana przez wygenerowany wrapper enumerable — po prostu for...in po wyniku, a klient pobiera dodatkowe strony na żądanie.

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;

Utwórz issue i przejrzyj pull request

Dwa krótkie wywołania — jedno modyfikujące, jedno czytające. Obie trasy zwracają te same silnie typowane obiekty, które opisuje specyfikacja.

// 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;

Co daje Ci wygenerowana jednostka

Każdy tag w oficjalnym opisie OpenAPI staje się typowaną klasą. Każdy udokumentowany parametr staje się typowanym argumentem.

Repozytoria i treść

Repos, Git, Contents, Branches, Tags, Releases, Forks. Czytaj, zapisuj i usuwaj pliki. Twórz gałęzie, zarządzaj regułami ochrony, szkicuj i publikuj wydania.

Issues i pull requesty

Issues, Pulls, Reviews, Comments, Reactions, Labels, Milestones, Assignees. Pełna powierzchnia współpracy.

Actions i checks

Actions, WorkflowRuns, WorkflowJobs, Artifacts, Secrets, Variables, Checks, CheckRuns, CheckSuites — buduj pulpity lub uruchamiaj automatyzację na danych GitHub Actions.

Packages i container registry

Packages, PackageVersions — zarządzaj pakietami npm, NuGet, Maven, RubyGems i kontenerami z Delphi.

Organizacje i zespoły

Orgs, Teams, Members, Memberships, OrgsAdmin dla operacji tylko dla właściciela jak SCIM provisioning.

Aplikacje GitHub

Apps, Installations, AppManifests — instaluj aplikacje GitHub programowo i wybijaj krótkotrwałe tokeny instalacji.

Trzy rzeczy, na które należy uważać

Limity szybkości i żądania warunkowe

GitHub wymusza godzinowy limit szybkości (5000 żądań/godzinę z tokenem, 60 bez uwierzytelniania). Wygenerowany klient przechowuje ostatni ETag dla każdej odpowiedzi GET — użyj ich ponownie, ustawiając IfNoneMatch przy następnym wywołaniu, aby uzyskać darmową odpowiedź 304.

Aplikacje GitHub potrzebują krótkotrwałych tokenów

Dla instalacji GitHub App wymieniasz JWT (podpisany kluczem prywatnym aplikacji) na 1-godzinny token instalacji. Użyj metody Apps.CreateInstallationAccessToken i odśwież token przed wygaśnięciem.

Polimorficzne zdarzenia osi czasu

Endpoint Issues.ListEventsForTimeline zwraca dyskryminowaną unię dziesiątek typów zdarzeń. Wygenerowana jednostka emituje klasę bazową i jednego potomka na wariant — rzutuj w dół na podstawie właściwości Event.

Z bloga

Parser OpenAPI Delphi

Jak bazowy parser obsługuje rzeczywiste specyfikacje OpenAPI 3.x.

Czytaj wpis →

Klient OpenAPI + parser

Towarzyszący wpis na blogu, który wprowadza zarówno wrapper klienta, jak i wnętrzności parsera.

Czytaj wpis →

sgcOpenAPI 2026.6

Najnowsze notatki wydania — nowe opcje generatora i poprawki parsera.

Czytaj wpis →

Zbuduj swoją automatyzację GitHub już dziś

sgcOpenAPI dostarcza parser, generator kodu, serwer OpenAPI i pakiety SDK Amazon, Google, Microsoft i Azure — jeden produkt, trzy poziomy.