sgcOpenAPI를 통한 GitHub REST API Delphi 클라이언트

GitHub는 공개적으로 사용 가능한 가장 큰 OpenAPI 설명을 유지 관리해요 — 저장소, 이슈, 풀 리퀘스트, 액션, 체크, 패키지 및 GraphQL 게이트웨이에 걸쳐 1,000개 이상의 엔드포인트. sgcOpenAPI에 입력하고 REST API가 노출하는 모든 GitHub 워크플로를 구동하는 데 애플리케이션이 사용할 수 있는 타입이 지정된 Delphi 유닛을 내보내세요.

GitHub + sgcOpenAPI

GitHub는 MIT 라이선스 하에 완전히 유지 관리되는 OpenAPI 3 설명을 출시해요. sgcOpenAPI는 이를 파싱하고 Delphi 7부터 RAD Studio 13까지 컴파일되는 단일 Pascal 유닛을 내보내요.

인증

개인 액세스 토큰, GitHub App JWT, OAuth

생성된 유닛

sgcOpenAPI_GitHub

플랫폼

Windows, macOS, Linux, iOS, Android

클라이언트 생성하기

GitHub는 두 가지 종류의 사양을 게시해요 — 공용 호스팅 서비스용 api.github.com.json과 GitHub Enterprise Server용 ghes-3.x.json. 대상으로 하는 것에 파서를 가리키세요.

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;

생성기는 GitHub 태그당 하나의 클래스를 내보내요 — TsgcGitHub_Repos, TsgcGitHub_Issues, TsgcGitHub_Pulls, TsgcGitHub_Actions, TsgcGitHub_Checks, TsgcGitHub_Packages, TsgcGitHub_OrgsAdmin 등 — 모두 최상위 TsgcGitHub 파사드가 소유해요.

저장소 나열하기

개인 액세스 토큰으로 인증한 다음 현재 사용자의 저장소를 열거하세요. 페이지 매김은 생성된 enumerable 래퍼에 의해 처리돼요 — 결과에 대해 for...in만 하면 클라이언트가 필요에 따라 추가 페이지를 가져와요.

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;

이슈 생성 및 풀 리퀘스트 검토

두 개의 짧은 호출 — 하나는 변경, 하나는 읽기. 두 경로 모두 사양이 설명하는 동일한 강력하게 타입이 지정된 객체를 반환해요.

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

생성된 유닛이 제공하는 것

공식 OpenAPI 설명의 모든 태그가 타입이 지정된 클래스가 돼요. 모든 문서화된 매개변수가 타입이 지정된 인수가 돼요.

저장소 & 콘텐츠

Repos, Git, Contents, Branches, Tags, Releases, Forks. 파일 읽기, 쓰기 및 삭제. 브랜치 생성, 보호 규칙 관리, 릴리스 초안 작성 및 게시.

이슈 & 풀 리퀘스트

Issues, Pulls, Reviews, Comments, Reactions, Labels, Milestones, Assignees. 전체 협업 표면.

액션 & 체크

Actions, WorkflowRuns, WorkflowJobs, Artifacts, Secrets, Variables, Checks, CheckRuns, CheckSuites — GitHub Actions 데이터에서 대시보드를 빌드하거나 자동화를 실행해요.

패키지 & 컨테이너 레지스트리

Packages, PackageVersions — Delphi에서 npm, NuGet, Maven, RubyGems 및 컨테이너 패키지를 관리해요.

조직 & 팀

SCIM 프로비저닝과 같은 소유자 전용 작업을 위한 Orgs, Teams, Members, Memberships, OrgsAdmin.

GitHub Apps

Apps, Installations, AppManifests — GitHub Apps를 프로그래밍 방식으로 설치하고 단기 설치 토큰을 발급해요.

주의할 세 가지

속도 제한 및 조건부 요청

GitHub는 시간당 속도 제한을 적용해요(토큰으로 5,000 요청/시간, 인증되지 않은 경우 60). 생성된 클라이언트는 모든 GET 응답에 대한 마지막 ETag를 저장해요 — 다음 호출에서 IfNoneMatch를 설정하여 재사용하고 무료 304 응답을 받으세요.

GitHub Apps에는 단기 토큰이 필요해요

GitHub App 설치의 경우 JWT(앱의 개인 키로 서명됨)를 1시간 설치 토큰으로 교환해요. Apps.CreateInstallationAccessToken 메서드를 사용하고 만료되기 전에 토큰을 새로 고치세요.

다형성 타임라인 이벤트

Issues.ListEventsForTimeline 엔드포인트는 수십 가지 이벤트 타입의 구별된 유니온을 반환해요. 생성된 유닛은 기본 클래스와 변형당 하나의 자손을 내보내요 — Event 속성을 기반으로 다운캐스트하세요.

블로그에서

OpenAPI Delphi 파서

기본 파서가 실제 OpenAPI 3.x 사양을 처리하는 방법.

게시물 읽기 →

OpenAPI 클라이언트 + 파서

클라이언트 래퍼와 파서 내부를 모두 소개하는 동반 블로그 게시물.

게시물 읽기 →

sgcOpenAPI 2026.6

최신 릴리스 노트 — 새로운 생성기 옵션 및 파서 수정 사항.

게시물 읽기 →

오늘 GitHub 자동화를 구축하세요

sgcOpenAPI는 파서, 코드 생성기, OpenAPI 서버 및 Amazon, Google, Microsoft 및 Azure SDK 번들을 출시해요 — 하나의 제품, 세 가지 등급.