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
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
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.
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:
curl https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
API vs. raw.githubusercontent.com
| Eigenschaft | GitHub API (/repos/.../contents) | raw.githubusercontent.com |
|---|---|---|
| Authentifizierung | Erforderlich für private Repos, höhere Rate Limits | Nicht möglich |
| Rate Limiting | API Rate Limit (z.B. 5000/Std. mit Auth) | Strengeres, CDN-basiertes Limiting |
| Metadaten | JSON-Antwort verfügbar (ohne Raw-Header) | Nicht verfügbar |
| Anwendungsfall | Automatisierte Skripte, App-Integrationen | Schnelles Anzeigen, Einbetten |
Wichtige Hinweise
- Fehlerhafter
Accept-Header: Ein falscher oder fehlenderAccept-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 derAccept-Header in einem falschen Kontext verwendet wird.