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▸▸▸

Interaktion mit der GitHub API über HTTPie

March 7, 2017

HTTPie ist ein modernes, benutzerfreundliches Kommandozeilen-Tool für HTTP-Anfragen, das sich als Alternative zu curl etabliert hat. Seine intuitive Syntax und die farbige, formatierte Ausgabe machen es ideal für das Testen, Debuggen und Prototyping von APIs direkt aus dem Terminal.

Diese Anleitung bietet eine Übersicht der grundlegenden httpie-Befehle für die Interaktion mit der GitHub REST API.


Installation

macOS (Homebrew):

code
brew install httpie

Linux (Debian/Ubuntu):

code
sudo apt-get install httpie

HTTPie: Grundlegende Syntax

Ein einfacher GET-Request wird wie folgt ausgeführt:

code
# Die Angabe von GET ist optional
http https://api.github.com

Wichtige Operatoren

  • key==value: Fügt einen URL-Query-Parameter hinzu (z.B. für Filterung oder Suche).
  • key=value: Sendet Daten als JSON-Objekt im Request Body (für POST/PUT/PATCH).
  • Header:Value: Definiert einen benutzerdefinierten HTTP-Header.
  • @file.json: Sendet den Inhalt einer lokalen Datei als Request Body.
  • :=: Sendet rohe JSON-Werte, z.B. Booleans, Zahlen oder Arrays.

Beispiel für Query-Parameter:

code
# Sucht nach Repositories mit 'tmux' und sortiert nach Sternen
http https://api.github.com/search/repositories q==tmux sort==stars

Grundlagen der GitHub API

Die GitHub REST API ist unter https://api.github.com erreichbar. Während viele Endpunkte öffentlich lesbar sind, unterliegen sie einem Rate Limiting.

Empfohlene Header für alle Anfragen:

code
Accept:application/vnd.github+json
X-GitHub-Api-Version:2022-11-28

Beispiel:

code
http https://api.github.com/users/torvalds \
  Accept:application/vnd.github+json \
  X-GitHub-Api-Version:2022-11-28

Authentifizierung

Für den Zugriff auf private Ressourcen oder zur Erhöhung der Rate Limits ist ein Personal Access Token (PAT) erforderlich.

  1. Token als Umgebungsvariable speichern:

    code
    export GITHUB_TOKEN=ghp_xxx
    
  2. Authentifizierte Anfrage senden:

    code
    http https://api.github.com/user \
      Authorization:"Bearer $GITHUB_TOKEN" \
      Accept:application/vnd.github+json
    

Anwendungsbeispiele

GET-Anfragen

  • Benutzerinformationen abrufen:
    code
    http https://api.github.com/users/octocat
    
  • Repository-Details abrufen:
    code
    http https://api.github.com/repos/octocat/Hello-World
    
  • Issues eines Repositories auflisten:
    code
    http https://api.github.com/repos/octocat/Hello-World/issues
    

POST-Anfrage: Issue erstellen

code
# Erstellt ein neues Issue mit Titel, Body und Labels
http POST https://api.github.com/repos/OWNER/REPO/issues \
  Authorization:"Bearer $GITHUB_TOKEN" \
  title="Bug: Button verursacht Layout-Fehler" \
  body="Schritte zur Reproduktion:\n1. ...\n2. ..." \
  labels:='["bug", "ui"]'

PATCH-Anfrage: Issue aktualisieren

code
# Schließt ein bestehendes Issue
http PATCH https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER \
  Authorization:"Bearer $GITHUB_TOKEN" \
  state=closed

Paginierung

Antworten, die Listen von Elementen enthalten, sind oft paginiert. Die URLs für die nächste, vorherige, erste und letzte Seite befinden sich im Link-Header der Antwort.

Mit -h (oder --headers) können nur die Header der Antwort angezeigt werden:

code
# Zeigt Header an, um den 'Link'-Header zu inspizieren
http -h https://api.github.com/orgs/github/repos per_page==5

Achten Sie auf den Link-Header in der Ausgabe: Link: <...>; rel="next", <...>; rel="last".


Rate Limits überprüfen

Informationen über Ihr aktuelles Rate Limit können über folgenden Endpunkt abgerufen werden:

code
http https://api.github.com/rate_limit

Authentifizierte Anfragen erhalten ein deutlich höheres Limit.


Antworten mit jq filtern

Obwohl HTTPie JSON-Antworten formatiert ausgibt, ist jq ein nützliches Werkzeug, um spezifische Werte aus der Antwort zu extrahieren.

code
# Extrahiert nur die Anzahl der Sterne aus der Repository-Antwort
http https://api.github.com/repos/octocat/Hello-World | jq '.stargazers_count'

Fehleranalyse

  • 401 Unauthorized: Der Token fehlt, ist ungültig oder hat nicht die erforderlichen Berechtigungen.
  • 403 Forbidden: Das Rate Limit wurde überschritten oder der Zugriff ist verboten.
  • 404 Not Found: Die angeforderte Ressource (z.B. User oder Repo) existiert nicht.
  • 422 Unprocessable Entity: Der gesendete Payload ist fehlerhaft (Validierungsfehler).