TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

Rohen Dateiinhalt über die GitHub API abrufen

March 7, 2017

Die GitHub REST API ermöglicht den Abruf von Datei-Inhalten aus einem Repository. Standardmäßig liefert der contents-Endpunkt eine JSON-Antwort mit Metadaten zur Datei, wobei der Inhalt Base64-kodiert ist. Um den reinen, dekodierten Dateiinhalt (raw content) zu erhalten, muss ein spezifischer Accept-Header gesendet werden.


Abruf über den contents-Endpunkt

Um den rohen Inhalt einer Datei zu erhalten, setzen Sie den Accept-Header auf application/vnd.github.v3.raw.

Beispiel mit HTTPie

code
http GET https://api.github.com/repos/github/gitignore/contents/Node.gitignore \
  Accept:application/vnd.github.v3.raw

Die Option -v (verbose) kann hilfreich sein, um die Anfrage- und Antwort-Header zu überprüfen.

Beispiel mit curl

code
curl -L -H "Accept: application/vnd.github.v3.raw" \
  "https://api.github.com/repos/github/gitignore/contents/Node.gitignore"

Der -L-Flag folgt eventuellen HTTP-Weiterleitungen, was bei Anfragen an die GitHub API empfohlen wird.


Branch oder Tag spezifizieren

Standardmäßig wird der Inhalt aus dem main- (oder master-) Branch abgerufen. Um eine Datei aus einem spezifischen Branch, Tag oder Commit-SHA abzurufen, verwenden Sie den ref-Query-Parameter.

code
http https://api.github.com/repos/OWNER/REPO/contents/path/to/file.txt \
  Accept:application/vnd.github.v3.raw \
  ref==my-feature-branch

Alternative: raw.githubusercontent.com

Für den direkten, nicht-authentifizierten Zugriff auf rohe Dateiinhalte bietet GitHub eine separate Domain. Diese Methode erfordert keine API-Anfrage und ist einfacher zu verwenden, unterliegt aber anderen Caching-Regeln und bietet keine Metadaten.

URL-Struktur: https://raw.githubusercontent.com/OWNER/REPO/BRANCH/path/to/file.txt

Beispiel:

code
curl https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore

API vs. raw.githubusercontent.com

EigenschaftGitHub API (/repos/.../contents)raw.githubusercontent.com
AuthentifizierungErforderlich für private Repos, höhere Rate LimitsNicht möglich
Rate LimitingAPI Rate Limit (z.B. 5000/Std. mit Auth)Strengeres, CDN-basiertes Limiting
MetadatenJSON-Antwort verfügbar (ohne Raw-Header)Nicht verfügbar
AnwendungsfallAutomatisierte Skripte, App-IntegrationenSchnelles Anzeigen, Einbetten

Wichtige Hinweise

  • Fehlerhafter Accept-Header: Ein falscher oder fehlender Accept-Header führt zur Standard-JSON-Antwort mit Base64-kodiertem Inhalt.
  • Rate Limits: Alle Anfragen an die GitHub API unterliegen einem Rate Limit. Authentifizierte Anfragen haben ein deutlich höheres Limit.
  • HTTP-Statuscodes:
    • 200 OK: Erfolgreicher Abruf.
    • 404 Not Found: Datei oder Repository nicht gefunden.
    • 415 Unsupported Media Type: Kann auftreten, wenn der Accept-Header in einem falschen Kontext verwendet wird.