sgcOpenAPI ile GitHub REST API Delphi İstemcisi

GitHub, herkese açık en büyük OpenAPI açıklamasını sürdürür — depolar, sorunlar, pull request'ler, actions, check'ler, paketler ve GraphQL ağ geçidi genelinde 1.000'den fazla uç nokta. Bunu sgcOpenAPI'ye verin ve uygulamanızın, REST API'nin sunduğu herhangi bir GitHub iş akışını yürütmek için kullanabileceği tipli bir Delphi birimi üretin.

GitHub + sgcOpenAPI

GitHub, MIT lisansı altında tam olarak sürdürülen bir OpenAPI 3 açıklaması sunar. sgcOpenAPI bunu ayrıştırır ve Delphi 7'den RAD Studio 13'e kadar derlenen tek bir Pascal birimi üretir.

Kaynak spesifikasyonu

github/rest-api-description

Kimlik doğrulama

Kişisel erişim belirteci, GitHub App JWT, OAuth

Üretilen birim

sgcOpenAPI_GitHub

Platformlar

Windows, macOS, Linux, iOS, Android

İstemciyi üretin

GitHub spesifikasyonun iki türünü yayınlar — herkese açık barındırılan hizmet için api.github.com.json ve GitHub Enterprise Server için ghes-3.x.json. Ayrıştırıcıyı hedeflediğiniz türe yönlendirin.

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;

Üretici, her GitHub etiketi için bir sınıf üretir — TsgcGitHub_Repos, TsgcGitHub_Issues, TsgcGitHub_Pulls, TsgcGitHub_Actions, TsgcGitHub_Checks, TsgcGitHub_Packages, TsgcGitHub_OrgsAdmin vb. — tümü üst düzey bir TsgcGitHub cephesine aittir.

Depoları listeleyin

Kişisel erişim belirteciyle kimlik doğrulaması yapın, ardından geçerli kullanıcının depolarını numaralandırın. Sayfalama, üretilen numaralandırılabilir sarmalayıcı tarafından işlenir — sonucun üzerinde yalnızca for...in kullanın ve istemci ek sayfaları istek üzerine getirir.

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;

Bir sorun oluşturun ve bir pull request inceleyin

İki kısa çağrı — biri değiştiren, biri okuyan. Her iki yol da spesifikasyonun açıkladığı aynı güçlü tipli nesneleri döndürür.

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

Üretilen birim size ne sağlar

Resmi OpenAPI açıklamasındaki her etiket tipli bir sınıf olur. Belgelenen her parametre tipli bir argüman olur.

Depolar ve içerik

Repos, Git, Contents, Branches, Tags, Releases, Forks. Dosyaları okuyun, yazın ve silin. Dallar oluşturun, koruma kurallarını yönetin, sürümleri taslak olarak hazırlayın ve yayınlayın.

Sorunlar ve pull request'ler

Issues, Pulls, Reviews, Comments, Reactions, Labels, Milestones, Assignees. Tüm iş birliği yüzeyi.

Actions ve check'ler

Actions, WorkflowRuns, WorkflowJobs, Artifacts, Secrets, Variables, Checks, CheckRuns, CheckSuites — gösterge panoları oluşturun veya GitHub Actions verileri üzerinde otomasyon çalıştırın.

Paketler ve konteyner kayıt defteri

Packages, PackageVersions — npm, NuGet, Maven, RubyGems ve konteyner paketlerini Delphi'den yönetin.

Kuruluşlar ve ekipler

SCIM sağlama gibi yalnızca sahibe özel işlemler için Orgs, Teams, Members, Memberships, OrgsAdmin.

GitHub Apps

Apps, Installations, AppManifests — GitHub Apps'i programatik olarak yükleyin ve kısa ömürlü kurulum belirteçleri üretin.

Dikkat edilmesi gereken üç şey

Hız sınırları ve koşullu istekler

GitHub saatlik bir hız sınırı uygular (belirteçle saatte 5.000 istek, kimlik doğrulaması olmadan 60). Üretilen istemci her GET yanıtı için son ETag değerini saklar — ücretsiz bir 304 yanıtı almak için bir sonraki çağrıda IfNoneMatch değerini ayarlayarak bunları yeniden kullanın.

GitHub Apps kısa ömürlü belirteçlere ihtiyaç duyar

GitHub App kurulumları için bir JWT'yi (uygulamanızın özel anahtarıyla imzalanmış) 1 saatlik bir kurulum belirteciyle değiştirirsiniz. Apps.CreateInstallationAccessToken metodunu kullanın ve belirtecin süresi dolmadan önce yenileyin.

Çok biçimli zaman çizelgesi olayları

Issues.ListEventsForTimeline uç noktası, onlarca olay türünün ayırt edici bir birleşimini döndürür. Üretilen birim bir temel sınıf ve her varyant için bir alt sınıf üretir — Event özelliğine göre aşağı dönüştürün.

Blogdan

OpenAPI Delphi ayrıştırıcısı

Temel ayrıştırıcının gerçek dünya OpenAPI 3.x spesifikasyonlarını nasıl işlediği.

Yazıyı okuyun →

OpenAPI istemcisi + ayrıştırıcı

Hem istemci sarmalayıcısını hem de ayrıştırıcının iç işleyişini tanıtan tamamlayıcı blog yazısı.

Yazıyı okuyun →

sgcOpenAPI 2026.6

En son sürüm notları — yeni üretici seçenekleri ve ayrıştırıcı düzeltmeleri.

Yazıyı okuyun →

GitHub otomasyonunuzu bugün oluşturun

sgcOpenAPI; ayrıştırıcıyı, kod üreticisini, OpenAPI sunucusunu ve Amazon, Google, Microsoft ile Azure SDK paketlerini sunar — tek ürün, üç kademe.