Skip to main content

Erste Schritte mit der REST-API

Erfahren Sie, wie Sie die GitHub REST-API verwenden.

Einführung

In diesem Artikel wird beschrieben, wie Sie die GitHub REST-API mit GitHub CLI, curloder JavaScript verwenden. Für eine Schnellstartanleitung siehe Schnellstart für GitHub REST-API.

In den Beispielen in diesem Artikel werden Anforderungen an https://api.github.com gesendet. Wenn Sie auf GitHub bei einer anderen Domäne zugreifen, wie z.B. octocorp.ghe.com, wird der Endpunkt für API-Anforderungen diese Domäne widerspiegeln. Beispiel: https://api.octocorp.ghe.com/

Informationen zu Anforderungen an die REST-API

In diesem Abschnitt werden die Elemente beschrieben, aus denen eine API-Anforderung besteht:

  •         [HTTP-Methode](#http-method)
    
  •         [Pfad](#path)
    
  •         [Kopfzeilen](#headers)
    
  •         [Medientypen](#media-types)
    
  •         [Authentifizierung](#authentication)
    
  •         [Parameter](#parameters)
    

Jede Anforderung an die REST-API enthält eine HTTP-Methode und einen Pfad. Je nach REST-API-Endpunkt müssen Sie möglicherweise auch Anforderungsheader, Authentifizierungsinformationen, Abfrageparameter oder Textparameter angeben.

Die REST-API-Referenzdokumentation beschreibt die HTTP-Methode, den Pfad und die Parameter für jeden Endpunkt. Außerdem werden für jeden Endpunkt Beispielanforderungen und -antworten bereitgestellt. Weitere Informationen finden Sie in der REST-Referenzdokumentation.

HTTP-Methode

Die HTTP-Methode eines Endpunkts definiert den Typ der Aktion, die er für eine bestimmte Ressource ausführt. Einige gängige HTTP-Methoden sind GET, POST, DELETE und PATCH. Die REST-API-Referenzdokumentation stellt die HTTP-Methode für jeden Endpunkt bereit.

Die HTTP-Methode für den Endpunkt „Repositoryprobleme auflisten“ lautet z. B. GET.“

Wenn möglich, ist die GitHub REST-API bestrebt, für jede Aktion eine entsprechende HTTP-Methode zu verwenden.

  •         `GET`: Wird zum Abrufen von Ressourcen verwendet.
    
  •         `POST`: Wird zum Erstellen von Ressourcen verwendet.
    
  •         `PATCH`: Wird zum Aktualisieren von Eigenschaften von Ressourcen verwendet.
    
  •         `PUT`: Wird zum Ersetzen von Ressourcen oder Sammlungen von Ressourcen verwendet.
    
  •         `DELETE`: Wird zum Löschen von Ressourcen verwendet.
    

Pfad

Jeder Endpunkt hat einen Pfad. Die REST-API-Referenzdokumentation gibt den Pfad für jeden Endpunkt an. Der Pfad zum Endpunkt „Repositoryprobleme auflisten“ lautet beispielsweise /repos/{owner}/{repo}/issues.

Die geschweiften Klammern {} in einem Pfad bezeichnen Pfadparameter, die Sie angeben müssen. Pfadparameter ändern den Endpunktpfad und sind in Ihrer Anforderung erforderlich. Die Pfadparameter zum Endpunkt „Repositoryprobleme auflisten“ lauten beispielsweise {owner} und {repo}. Wenn Sie diesen Pfad in Ihrer API-Anforderung verwenden möchten, ersetzen Sie {repo} mit dem Namen des Repositorys, für das Sie eine Liste von Issues anfordern möchten, und ersetzen Sie {owner} mit dem Namen des Kontos, das das Repository besitzt.

Header

Header enthalten zusätzliche Informationen zur Anforderung und zur gewünschten Antwort. Im Folgenden finden Sie einige Beispiele für Header, die Sie in Ihren Anforderungen an die GitHub REST-API verwenden können. Ein Beispiel für eine Anforderung, die Header verwendet, findest du unter Erstellen einer Anforderung.

Accept

Die meisten GitHub REST-API-Endpunkte geben an, dass Sie einen Accept Header mit einem Wert von application/vnd.github+jsonübergeben sollten. Der Wert des Accept-Headers ist ein Medientyp. Weitere Informationen zu Medientypen findest du unter Medientypen.

X-GitHub-Api-Version

Sie sollten diesen Header verwenden, um eine Version der REST-API anzugeben, die für Ihre Anforderung verwendet werden soll. Weitere Informationen finden Sie unter API-Versionen.

User-Agent

Alle API-Anforderungen müssen einen gültigen User-Agent-Header enthalten. Der User-Agent-Header identifiziert den/die Benutzer*in oder die Anwendung, welche die Anforderung vornimmt.

Standardmäßig sendet GitHub CLI einen gültigen User-Agent-Header. Es wird jedoch empfohlen, Ihren GitHub Benutzernamen oder den Namen Ihrer Anwendung für den User-Agent Headerwert zu verwenden. Auf diese Weise kann GitHub Sie bei Problemen kontaktieren.

Standardmäßig sendet curl einen gültigen User-Agent-Header. Empfiehlt jedoch GitHub die Verwendung Ihres GitHub Benutzernamens oder des Namens Ihrer Anwendung für den User-Agent Headerwert. Auf diese Weise kann GitHub Sie im Falle von Problemen kontaktieren.

Wenn Sie das Octokit.js SDK verwenden, sendet das SDK einen gültigen User-Agent-Header für Sie. Jedoch empfiehlt GitHub die Verwendung Ihres GitHub Benutzernamens oder des Namens Ihrer Anwendung für den User-Agent Headerwert. Auf diese Weise kann GitHub Sie kontaktieren, wenn Probleme auftreten.

Das folgende ist ein Beispiel User-Agent für eine App mit dem Namen Awesome-Octocat-App:

User-Agent: Awesome-Octocat-App

Anforderungen ohne User-Agent-Header werden abgelehnt. Wenn Sie einen ungültigen User-Agent-Header angeben, erhalten Sie eine 403 Forbidden-Antwort.

Medientypen

Sie können einen oder mehrere Medientypen angeben, indem Sie sie dem Accept-Header Ihrer Anforderung hinzufügen. Weitere Informationen zum Accept-Header findest du unter Accept.

Medientypen geben das Format der Daten an, die Sie von der API verbrauchen möchten. Medientypen sind ressourcenspezifisch, sodass sie unabhängig voneinander geändert werden können und Formate unterstützen, die von anderen Ressourcen nicht unterstützt werden. In der Dokumentation für jeden GitHub REST-API-Endpunkt werden die von ihr unterstützten Medientypen beschrieben. Weitere Informationen findest du unter Dokumentation zu GitHub-REST-API.

Die gängigsten Medientypen, die von der GitHub REST-API unterstützt werden, sind application/vnd.github+json und application/json.

Es gibt benutzerdefinierte Medientypen, die mit einigen Endpunkten verwendet werden können. Zum Beispiel unterstützt die REST-API zum Verwalten von Commits und Pull Requests die Medientypen diff, patch und sha. Die Medientypen full, raw, text, oder html werden von einigen anderen Endpunkten verwendet.

Alle benutzerdefinierten Medientypen für GitHub sehen wie folgt aus: application/vnd.github.PARAM+json, wo PARAM der Name des Medientyps ist. Um z. B. den Medientyp raw anzugeben, würden Sie beispielsweise application/vnd.github.raw+json verwenden.

Ein Beispiel für eine Anforderung, die Medientypen verwendet, findest du unter Erstellen einer Anforderung.

Authentifizierung

Viele Endpunkte erfordern die Authentifizierung oder senden im Fall einer Authentifizierung zusätzliche Informationen zurück. Darüber hinaus können Sie mehr Anforderungen pro Stunde stellen, wenn Sie authentifiziert sind.

Um Ihre Anforderung zu authentifizieren, müssen Sie ein Authentifizierungstoken mit den erforderlichen Bereichen oder Berechtigungen bereitstellen. Es gibt verschiedene Möglichkeiten zum Abrufen eines Tokens: Sie können ein personal access tokenToken erstellen, ein Token mit einem GitHub App generieren oder den integrierten GITHUB_TOKENGitHub Actions Workflow verwenden. Weitere Informationen finden Sie unter Authentifizieren bei der REST-API.

Ein Beispiel für eine Anforderung, die ein Authentifizierungstoken verwendet, findest du unter Erstellen einer Anforderung.

Hinweis

Wenn Sie kein Token erstellen möchten, können Sie es verwenden GitHub CLI. GitHub CLI kümmert sich um die Authentifizierung für Sie und hilft Ihnen, Ihr Konto sicher zu halten. Weitere Informationen finden Sie in der GitHub CLI Version dieser Seite.

Warnung

Behandle dein Zugriffstoken auf die gleiche Weise wie deine Kennwörter oder andere vertrauliche Anmeldeinformationen. Weitere Informationen finden Sie unter Schützen deiner API-Anmeldeinformationen.

Obwohl auf einige REST-API-Endpunkte ohne Authentifizierung zugegriffen werden kann, müssen Sie sich authentifizieren, GitHub CLI bevor Sie den api Unterbefehl verwenden können, um eine API-Anforderung zu stellen. Verwenden Sie den auth login Unterbefehl, um sich bei GitHub zu authentifizieren. Weitere Informationen findest du unter Eine Anforderung stellen.

Um Ihre Anforderung zu authentifizieren, müssen Sie ein Authentifizierungstoken mit den erforderlichen Bereichen oder Berechtigungen bereitstellen. Es gibt verschiedene Möglichkeiten, ein Token zu erhalten: Sie können ein personal access token erstellen, ein Token mit einem GitHub App generieren oder den integrierten GITHUB_TOKEN im GitHub Actions-Workflow verwenden. Weitere Informationen finden Sie unter Authentifizieren bei der REST-API.

Ein Beispiel für eine Anforderung, die ein Authentifizierungstoken verwendet, findest du unter Erstellen einer Anforderung.

Warnung

Behandle dein Zugriffstoken auf die gleiche Weise wie deine Kennwörter oder andere vertrauliche Anmeldeinformationen. Weitere Informationen finden Sie unter Schützen deiner API-Anmeldeinformationen.

Parameter

Viele API-Methoden erfordern oder ermöglichen es Ihnen, zusätzliche Informationen in Parametern in Ihren Anforderung zu senden. Es gibt verschiedene Typen von Parametern: Pfadparameter, Textparameter und Abfrageparameter.

Pfadparameter

Pfadparameter ändern den Endpunktspfad. Diese Parameter sind für Ihre Anforderung erforderlich. Weitere Informationen finden Sie unter Path.

Körperparameter

Textparameter ermöglichen es dir, zusätzliche Daten an die API zu übergeben. Diese Parameter können je nach Endpunkt optional oder erforderlich sein. Ein Textparameter kann es Ihnen z. B. ermöglichen, beim Erstellen eines neuen Issues einen Issue-Titel anzugeben oder bestimmte Einstellungen beim Aktivieren oder Deaktivieren eines Features anzugeben. In der Dokumentation für jeden GitHub REST-API-Endpunkt werden die von ihm unterstützten Body-Parameter beschrieben. Weitere Informationen findest du unter Dokumentation zu GitHub-REST-API.

Beim „Erstellen eines Issues“-Endpunkt müssen Sie zum Beispiel in Ihrer Anforderung einen Titel für das neue Issue angeben. Darüber hinaus können Sie optional andere Informationen angeben, z. B. Text, der in den Issue-Text eingefügt werden soll, Benutzer*innen, die dem neuen Issue zugewiesen werden sollen, oder Bezeichnungen, die auf den neuen Issue angewendet werden sollen. Ein Beispiel für eine Anforderung, die Textparameter verwendet, findest du unter Erstellen einer Anforderung.

Sie müssen Ihre Anforderung authentifizieren, um Textparameter weiterzugeben. Weitere Informationen finden Sie unter Authentifizierung.

Abfrageparameter

Mithilfe von Abfrageparametern kannst du steuern, welche Daten für eine Anforderung zurückgegeben werden. Diese Parameter sind üblicherweise optional. In der Dokumentation für jeden GitHub REST-API-Endpunkt werden alle von ihr unterstützten Abfrageparameter beschrieben. Weitere Informationen findest du unter Dokumentation zu GitHub-REST-API.

Beispielsweise gibt der Endpunkt „Öffentliche Ereignisse auflisten“ standardmäßig dreißig Issues zurück. Sie können mit dem Abfrageparameter per_page angeben, dass anstelle von 30 Issues zwei Issues zurückgegeben werden. Sie können den Abfrageparameter page verwenden, um nur die erste Seite der Ergebnisse abzurufen. Ein Beispiel für eine Anforderung, die Abfrageparameter verwendet, findest du unter Erstellen einer Anforderung.

Erstellen einer Anforderung

In diesem Abschnitt wird gezeigt, wie Sie eine authentifizierte Anforderung an die REST-API mithilfe von GitHubGitHub CLI stellen.

1. Einrichten

Installieren Sie GitHub CLI unter macOS, Windows oder Linux. Weitere Informationen finden Sie unter Installation im GitHub CLI Repository.

2. Authentifizieren

  1. Um sich bei GitHub zu authentifizieren, führen Sie den folgenden Befehl in Ihrem Terminal aus.

    gh auth login
    

    Mit der Option --scopes können Sie angeben, was für Bereiche Sie auswählen möchten. Wenn Sie sich mit einem von Ihnen erstellten Token authentifizieren möchten, können Sie die Option --with-token verwenden. Weitere Informationen finden Sie in der GitHub CLIauth login Dokumentation.

  2. Wähle aus, wo du dich authentifizieren möchtest:

    • Wenn Sie auf GitHub bei GitHub.com zugreifen, wählen Sie GitHub.com aus.
    • Wenn Sie auf eine andere Domäne zugreifen GitHub , wählen Sie "Sonstige" aus, und geben Sie dann Ihren Hostnamen ein (z. B.: octocorp.ghe.com).
  3. Befolge die restlichen Anweisungen auf dem Bildschirm.

           GitHub CLI Speichert Ihre Git-Anmeldeinformationen automatisch für Sie, wenn Sie HTTPS als bevorzugtes Protokoll für Git-Vorgänge auswählen und "Ja" beantworten, um zu fragen, ob Sie sich mit Ihren GitHub Anmeldeinformationen bei Git authentifizieren möchten. Dies kann nützlich sein, da Sie damit Git-Befehle wie `git push`, `git pull`, usw. verwenden können, ohne eine separate Anmeldeinformationsverwaltung einrichten oder SSH verwenden zu müssen.
    

3. Wählen Sie einen Endpunkt für Ihre Anforderung aus.

  1. Wählen Sie einen Endpunkt aus, an dem eine Anforderung gestellt werden soll. Sie können die GitHub erkunden, um Endpunkte zu ermitteln, mit GitHubdenen Sie interagieren können.

  2. Identifizieren Sie die HTTP-Methode und den Pfad des Endpunkts. Sie werden diese mit Ihrer Anforderung senden. Weitere Informationen findest du unter HTTP-Methode und Pfad.

    Der Endpunkt „Issue erstellen“ verwendet z. B. die HTTP-Methode POST und den Pfad /repos/{owner}/{repo}/issues.

  3. Identifizieren Sie alle erforderlichen Pfadparameter. Erforderliche Pfadparameter werden in geschweiften Klammern {} im Pfad des Endpunkts angezeigt. Ersetzen Sie die Parameter-Platzhalter durch die gewünschten Werte. Weitere Informationen finden Sie unter Path.

    Der Endpunkt „Issue erstellen“ verwendet z. B. den Pfad /repos/{owner}/{repo}/issues und die Pfadparameter sind {owner} und {repo}. Wenn Sie diesen Pfad in Ihrer API-Anforderung verwenden möchten, ersetzen Sie {repo} mit dem Namen des Repositorys, für das Sie ein neues Issue erstellen möchten, und ersetzen Sie {owner} durch den Namen des Kontos, das das Repository besitzt.

4. Stellen Sie eine Anfrage mit GitHub CLI

Verwenden Sie den GitHub CLIapi Unterbefehl, um Ihre API-Anforderung zu stellen. Weitere Informationen finden Sie in der GitHub CLIapi Dokumentation.

Geben Sie in Ihrer Anforderung die folgenden Optionen und Werte an: * --Hostname: Wenn Sie auf mehreren GitHub Plattformen authentifiziert sind, geben Sie an, wo Sie die Anforderung stellen. Beispiel: --hostname octocorp.ghe.com * --Methode gefolgt von der HTTP-Methode und dem Pfad des Endpunkts. Weitere Informationen findest du unter HTTP-Methode und Pfad. * --header * ** Accept:** Übergib den Medientyp in einem Accept-Header. Um mehrere Medientypen in einem Accept-Header weiterzugeben, trennen Sie die Medientypen durch ein Komma: Accept: application/vnd.github+json,application/vnd.github.diff. Weitere Informationen findest du unter Accept und Medientypen. * ** X-GitHub-Api-Version:** Übergeben Sie die API-Version in einem header X-GitHub-Api-Version. Weitere Informationen finden Sie unter X-GitHub-Api-Version. * ** -f ** oder -F gefolgt von Textparametern oder Abfrageparametern im key=value-Format. Verwende die Option -F, um einen Parameter zu übergeben, der eine Zahl, ein Boolescher Wert oder null ist. Verwenden Sie die Option -f, um Zeichenkettenparameter zu übergeben.

Einige Endpunkte verwenden Abfrageparameter, die Arrays (Matrix) sind. Um ein Array in der Abfragezeichenfolge zu senden, verwenden Sie den Abfrageparameter einmal pro Arrayelement, und fügen Sie nach dem Namen des Abfrageparameters an [] . Um beispielsweise ein Array von zwei Repository-IDs bereitzustellen, verwenden Sie -f repository_ids[]=REPOSITORY_A_ID -f repository_ids[]=REPOSITORY_B_ID.

Wenn Sie keine Textparameter oder Abfrageparameter in Ihrer Anforderung angeben müssen, lassen Sie diese Option aus. Weitere Informationen findest du unter Textparameter und Abfrageparameter. Beispiele findest du unter Beispielanforderung mithilfe von Textparametern und Beispielanforderung mithilfe von Abfrageparametern. * --Hostname: Wenn Sie auf mehreren GitHub Plattformen authentifiziert sind, geben Sie an, wo Sie die Anforderung stellen. Beispiel: --hostname octocorp.ghe.com

Beispielanforderung

Die folgende Beispielanforderung verwendet den „Get Octocat“-Endpunkt, um Oktocat als ASCII-Grafik zurückzusenden.

Shell
gh api --method GET /octocat \
--header 'Accept: application/vnd.github+json' \
--header "X-GitHub-Api-Version: 2022-11-28"

Beispielanforderung mithilfe von Abfrageparametern

Der Endpunkt "Öffentliche Ereignisse auflisten" sendet standardmäßig dreißig Issues zurück. Im folgenden Beispiel wird der per_page-Abfrageparameter verwendet, um zwei Probleme anstelle von 30 zurückzusenden, und der page-Abfrageparameter, um nur die erste Seite der Ergebnisse abzurufen.

Shell
gh api --method GET /events -F per_page=2 -F page=1
--header 'Accept: application/vnd.github+json' \

Beispielanforderung mit Body-Parametern

Im folgenden Beispiel wird der Endpunkt "Problem erstellen" verwendet, um ein neues Problem in Octocat/Spoon-Knife-Repository zu erstellen. Suchen Sie in der Antwort das html_url Problem, und navigieren Sie im Browser zu Ihrem Problem.

Shell
gh api --method POST /repos/octocat/Spoon-Knife/issues \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
-f title='Created with the REST API' \
-f body='This is a test issue created by the REST API' \

In diesem Abschnitt wird veranschaulicht, wie Sie eine authentifizierte Anfrage an die REST-API mithilfe von GitHubcurl stellen.

1. Einrichten

Auf Ihrem Computer muss curl installiert sein. Um festzustellen, ob curl bereits installiert ist, führen Sie an der Befehlszeile curl --version aus.

  • Wenn die Ausgabe Informationen über die Version von curl enthält, bedeutet dies, dass curl installiert ist.
  • Wenn Sie eine Meldung ähnlich command not found: curl erhalten, bedeutet dies, dass curl nicht installiert ist. Laden Sie curl herunter und installieren Sie es. Weitere Informationen finden Sie auf der Downloadseite für curl.

2. Wählen Sie einen Endpunkt für Ihre Anforderung aus

  1. Wählen Sie einen Endpunkt aus, an dem eine Anforderung gestellt werden soll. Sie können die GitHub erkunden, um Endpunkte zu ermitteln, mit GitHubdenen Sie interagieren können.

  2. Identifizieren Sie die HTTP-Methode und den Pfad des Endpunkts. Sie werden diese mit Ihrer Anforderung senden. Weitere Informationen findest du unter HTTP-Methode und Pfad.

    Der Endpunkt „Issue erstellen“ verwendet z. B. die HTTP-Methode POST und den Pfad /repos/{owner}/{repo}/issues.

  3. Identifizieren Sie alle erforderlichen Pfadparameter. Erforderliche Pfadparameter werden in geschweiften Klammern {} im Pfad des Endpunkts angezeigt. Ersetzen Sie die Parameter-Platzhalter durch die gewünschten Werte. Weitere Informationen finden Sie unter Path.

    Der Endpunkt „Issue erstellen“ verwendet z. B. den Pfad /repos/{owner}/{repo}/issues und die Pfadparameter sind {owner} und {repo}. Wenn Sie diesen Pfad in Ihrer API-Anforderung verwenden möchten, ersetzen Sie {repo} mit dem Namen des Repositorys, für das Sie ein neues Issue erstellen möchten, und ersetzen Sie {owner} durch den Namen des Kontos, das das Repository besitzt.

3. Erstellen Sie Authentifizierungsdaten

Erstellen eines Zugriffstokens, um Ihre Anforderung zu authentifizieren. Sie können Ihr Token speichern und für mehrere Anforderungen verwenden. Weisen Sie dem Token alle Bereiche oder Berechtigungen zu, die für den Zugriff auf den Endpunkt erforderlich sind. Sie senden dieses Token in einem Authorization-Header mit Ihrer Anfrage. Weitere Informationen finden Sie unter Authentifizierung.

4. Übermitteln Sie eine curl-Anforderung

Verwenden Sie den Befehl curl, um Ihre Anforderung auszuführen. Weitere Informationen finden Sie in der curl-Dokumentation.

Geben Sie in Ihrer Anforderung die folgenden Optionen und Werte an:

  •         **
            `--request` oder `-X`**, gefolgt von der HTTP-Methode als Wert. Weitere Informationen findest du unter [HTTP-Methode](#http-method).
    
  •         **
            `--url`
            ** gefolgt vom vollständigen Pfad als Wert. Der vollständige Pfad ist eine URL, die die Basis-URL für die GitHub-REST-API enthält (`https://api.github.com` oder , je nachdem, wo Sie darauf zugreifen`https://api.SUBDOMAIN.ghe.com` ) und den Pfad des Endpunkts, wie folgt: GitHub.`https://api.github.com/PATH` Ersetzen Sie `PATH` durch den Pfad des Endpunkts. Weitere Informationen finden Sie unter [Path](#path).
    

    Um Abfrageparameter zu verwenden, fügen Sie ein ? am Ende des Pfads ein und hängen dann den Namen und den Wert Ihres Abfrageparameters in der Form parameter_name=value an. Trennen Sie mehrere Abfrageparameter durch &. Wenn Sie ein Array in der Abfragezeichenkette senden müssen, verwenden Sie den Abfrageparameter einmal pro Array-Element und hängen Sie ein [] an den Namen des Abfrageparameters an. Um beispielsweise ein Array von zwei Repository-IDs bereitzustellen, verwenden Sie ?repository_ids[]=REPOSITORY_A_ID&repository_ids[]=REPOSITORY_B_ID. Weitere Informationen findest du unter Abfrageparameter. Ein Beispiel findest du unter Beispielanforderung mithilfe von Abfrageparametern.

  •         **
            `--header` oder `-H`:**
    

    * ** Accept:** Übergib den Medientyp in einem Accept-Header. Um mehrere Medientypen in einem Accept-Header zu übergeben, trennen Sie die Medientypen durch ein Komma, z. B.: Accept: application/vnd.github+json,application/vnd.github.diff. Weitere Informationen findest du unter Accept und Medientypen. * ** X-GitHub-Api-Version:** Übergeben Sie die API-Version in einem header X-GitHub-Api-Version. Weitere Informationen finden Sie unter X-GitHub-Api-Version. * ** Authorization:** Übergeben Sie Ihr Authentifizierungstoken im Authorization-Header. Beachten Sie, dass Sie in den meisten Fällen Authorization: Bearer oder Authorization: token verwenden können, um ein Token zu übergeben. Wenn Sie jedoch ein JWT (JSON Web Token) weitergeben, müssen Sie Authorization: Bearer verwenden. Weitere Informationen finden Sie unter Authentifizierung. Ein Beispiel für eine Anforderung, die einen Authorization-Header verwendet, findest du unter Beispielanforderung mithilfe von Textparametern.

  •         **
            `--data` oder `-d`** gefolgt von Textparametern innerhalb eines JSON-Objekts. Wenn Sie keine Rumpfparameter in Ihrer Anforderung angeben müssen, können Sie diese Option weglassen. Weitere Informationen findest du unter [Körperparameter](#body-parameters). Ein Beispiel findest du unter [Beispielanforderung mithilfe von Textparametern](#example-request-using-body-parameters-1).
    

Beispielanforderung

Die folgende Beispielanforderung verwendet den „Get Octocat“-Endpunkt, um Oktocat als ASCII-Grafik zurückzusenden.

Shell
curl --request GET \
--url "https://api.github.com/octocat" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28"

Beispielanforderung mithilfe von Abfrageparametern

Der Endpunkt "Öffentliche Ereignisse auflisten" sendet standardmäßig dreißig Issues zurück. Im folgenden Beispiel wird der per_page-Abfrageparameter verwendet, um zwei Probleme anstelle von 30 zurückzusenden, und der page-Abfrageparameter, um nur die erste Seite der Ergebnisse abzurufen.

Shell
curl --request GET \
--url "https://api.github.com/events?per_page=2&page=1" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/events

Beispielanforderung mit Body-Parametern

Im folgenden Beispiel wird der Endpunkt "Problem erstellen" verwendet, um ein neues Problem in Octocat/Spoon-Knife-Repository zu erstellen. Ersetzen Sie YOUR-TOKEN es durch das Authentifizierungstoken, das Sie in einem vorherigen Schritt erstellt haben.

Hinweis

Wenn Sie ein fine-grained personal access token verwenden, müssen Sie octocat/Spoon-Knife durch ein Repository ersetzen, das Sie besitzen oder das einer Organisation gehört, bei der Sie Mitglied sind. Ihr Token muss Zugriff auf dieses Repository haben und über Lese- und Schreibberechtigungen für Probleme im Repository verfügen. Weitere Informationen finden Sie unter Verwalten deiner persönlichen Zugriffstoken.

Shell
curl \
--request POST \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
--header "Authorization: Bearer YOUR-TOKEN" \
--data '{
  "title": "Created with the REST API",
  "body": "This is a test issue created by the REST API"
}'

In diesem Abschnitt wird veranschaulicht, wie Sie eine Anforderung an die GitHub REST-API mit JavaScript und Octokit.jsstellen. Einen ausführlicheren Leitfaden findest du unter Skripterstellung mit der REST-API und JavaScript.

1. Einrichten

Sie müssen octokit installieren, um die Octokit.js-Bibliothek zu verwenden, die in den folgenden Beispielen gezeigt wird.

  • Installiere octokit. Beispiel: npm install octokit. Informationen über andere Möglichkeiten zum Installieren oder Laden von octokit findest du in der Octokit.js-Infodatei.

2. Wählen Sie einen Endpunkt für Ihre Anforderung aus

  1. Wählen Sie einen Endpunkt aus, an dem eine Anforderung gestellt werden soll. Sie können die GitHub erkunden, um Endpunkte zu ermitteln, mit GitHubdenen Sie interagieren können.

  2. Identifizieren Sie die HTTP-Methode und den Pfad des Endpunkts. Sie werden diese mit Ihrer Anforderung senden. Weitere Informationen findest du unter HTTP-Methode und Pfad.

    Der Endpunkt „Issue erstellen“ verwendet z. B. die HTTP-Methode POST und den Pfad /repos/{owner}/{repo}/issues.

  3. Identifizieren Sie alle erforderlichen Pfadparameter. Erforderliche Pfadparameter werden in geschweiften Klammern {} im Pfad des Endpunkts angezeigt. Ersetzen Sie die Parameter-Platzhalter durch die gewünschten Werte. Weitere Informationen finden Sie unter Path.

    Der Endpunkt „Issue erstellen“ verwendet z. B. den Pfad /repos/{owner}/{repo}/issues und die Pfadparameter sind {owner} und {repo}. Wenn Sie diesen Pfad in Ihrer API-Anforderung verwenden möchten, ersetzen Sie {repo} mit dem Namen des Repositorys, für das Sie ein neues Issue erstellen möchten, und ersetzen Sie {owner} durch den Namen des Kontos, das das Repository besitzt.

3. Erstellen Sie ein Zugriffstoken

Erstellen eines Zugriffstokens, um Ihre Anforderung zu authentifizieren. Sie können Ihr Token speichern und für mehrere Anforderungen verwenden. Weisen Sie dem Token alle Bereiche oder Berechtigungen zu, die für den Zugriff auf den Endpunkt erforderlich sind. Sie senden dieses Token in einem Authorization-Header mit Ihrer Anfrage. Weitere Informationen finden Sie unter Authentifizierung.

4. Stellen Sie eine Anforderung mit Octokit.js

  1. Importiere octokit in dein Skript. Beispiel: import { Octokit } from "octokit";. Informationen über andere Möglichkeiten zum Importieren von octokit findest du in der Octokit.js-Infodatei.

  2. Erstellen Sie eine Instanz von Octokit mit Ihrem Token. Ersetzen Sie YOUR-TOKEN durch Ihr Token.

    JavaScript
    const octokit = new Octokit({ 
      auth: 'YOUR-TOKEN'
    });
    
  3. Verwenden Sie octokit.request, um Ihre Anforderung auszuführen.

    • Senden Sie die HTTP-Methode und den Pfad als erstes Argument an die request-Methode. Weitere Informationen findest du unter HTTP-Methode und Pfad.
    • Geben Sie alle Pfad-, Abfrage- und Textparameter in einem Objekt als zweites Argument für die request-Methode an. Weitere Informationen finden Sie unter Parameter.

    In der folgenden Beispielanforderung lautet POSTdie HTTP-Methode , der Pfad lautet /repos/{owner}/{repo}/issues, die Pfadparameter sind owner: "octocat" und repo: "Spoon-Knife", und die Body-Parameter sind title: "Created with the REST API" und body: "This is a test issue created by the REST API".

    Hinweis

    Wenn Sie ein fine-grained personal access token verwenden, müssen Sie octocat/Spoon-Knife durch ein Repository ersetzen, das Sie besitzen oder das einer Organisation gehört, bei der Sie Mitglied sind. Ihr Token muss Zugriff auf dieses Repository haben und über Lese- und Schreibberechtigungen für Probleme im Repository verfügen. Weitere Informationen finden Sie unter Verwalten deiner persönlichen Zugriffstoken.

    JavaScript
    await octokit.request("POST /repos/{owner}/{repo}/issues", {
      owner: "octocat",
      repo: "Spoon-Knife",
      title: "Created with the REST API",
      body: "This is a test issue created by the REST API",
    });
    

    Bei der request-Methode wird der Header Accept: application/vnd.github+json automatisch übergeben. Füge zum Übergeben zusätzlicher Header oder eines anderen Accept-Headers dem Objekt eine headers-Eigenschaft hinzu, die als zweites Argument übergeben wird. Der Wert der Eigenschaft headers ist ein Objekt mit den Headernamen als Schlüssel und den Headerwerten als Werte.

    Der folgende Code sendet z. B. einen content-type Header mit dem Wert text/plain und einer X-GitHub-Api-Version Header mit dem Wert 2026-03-10.

    JavaScript
    await octokit.request("GET /octocat", {
      headers: {
        "content-type": "text/plain",
        "X-GitHub-Api-Version": "2026-03-10",
      },
    });
    

Verwendung der Antwort

Nachdem Sie eine Anforderung gestellt haben, sendet die API den Statuscode der Antwort, die Antwortheader und möglicherweise einen Antworttext zurück.

Informationen zu Antwortcodes und Headern

Jede Anforderung gibt einen HTTP-Statuscode zurück, der den Erfolgsstatus der Antwort anzeigt. Weitere Informationen zu Antwortcodes findest du in der MDN-Dokumentation zu HTTP-Antwortstatuscodes.

Außerdem enthält die Antwort Header, die weitere Informationen zur Antwort liefern. Kopfzeilen, die mit X- oder x- beginnen, sind benutzerdefiniert für GitHub. Die Header x-ratelimit-remaining und x-ratelimit-reset informieren dich zum Beispiel darüber, wie viele Anforderungen du in einem bestimmten Zeitraum ausführen kannst.

Um den Statuscode und die Header anzuzeigen, verwenden Sie beim Senden Ihrer Anforderung die Option --include oder --i.

Diese Anforderung ruft z. B. eine Liste von Issues im angegebenen octocat/Spoon-Knife-Repository ab.

gh api \
--header 'Accept: application/vnd.github+json' \
--method GET /repos/octocat/Spoon-Knife/issues \
-F per_page=2 --include

Und sie sendet einen Antwortcode und Header zurück, der ungefähr so aussieht:

HTTP/2.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Cache-Control: private, max-age=60, s-maxage=60
Content-Security-Policy: default-src 'none'
Content-Type: application/json; charset=utf-8
Date: Thu, 04 Aug 2022 19:56:41 GMT
Etag: W/"a63dfbcfdb73621e9d2e89551edcf9856731ced534bd7f1e114a5da1f5f73418"
Link: <https://api.github.com/repositories/1300192/issues?per_page=1&page=2>; rel="next", <https://api.github.com/repositories/1300192/issues?per_page=1&page=14817>; rel="last"
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Server: GitHub.com
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
Vary: Accept, Authorization, Cookie, Accept-Encoding, Accept, X-Requested-With
X-Accepted-Oauth-Scopes: repo
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-Github-Api-Version-Selected: 2022-08-09
X-Github-Media-Type: github.v3; format=json
X-Github-Request-Id: 1C73:26D4:E2E500:1EF78F4:62EC2479
X-Oauth-Client-Id: 178c6fc778ccc68e1d6a
X-Oauth-Scopes: gist, read:org, repo, workflow
X-Ratelimit-Limit: 15000
X-Ratelimit-Remaining: 14996
X-Ratelimit-Reset: 1659645499
X-Ratelimit-Resource: core
X-Ratelimit-Used: 4
X-Xss-Protection: 0

In diesem Beispiel lautet der Antwortcode 200, d. h. die Anforderung war erfolgreich.

Wenn du eine Anforderung mit „Octokit.js“ ausführst, gibt die Methode request eine Zusage zurück. Wenn die Anforderung erfolgreich war, wird die Zusage in ein Objekt aufgelöst, das den HTTP-Statuscode der Antwort (status) und die Antwortheader (headers) enthält. Wenn ein Fehler auftritt, wird die Zusage in ein Objekt aufgelöst, das den HTTP-Statuscode der Antwort (status) und die Antwortheader (response.headers) enthält.

Du kannst einen try/catch-Block verwenden, um einen eventuell auftretenden Fehler abzufangen. Wenn die Anforderung im folgenden Skript beispielsweise erfolgreich ist, protokolliert das Skript den Statuscode und den Wert des x-ratelimit-remaining-Headers. War die Anforderung nicht erfolgreich, protokolliert das Skript den Statuscode, den Wert des x-ratelimit-remaining-Headers und die Fehlermeldung.

Ersetzen Sie im folgenden Beispiel REPO-OWNER durch den Namen des Kontos, das das Repository besitzt, und REPO-NAME durch den Namen des Repositorys.

JavaScript
try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "REPO-OWNER",
    repo: "REPO-NAME",
    per_page: 2,
  });

  console.log(`Success! Status: ${result.status}. Rate limit remaining: ${result.headers["x-ratelimit-remaining"]}`)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Rate limit remaining: ${error.headers["x-ratelimit-remaining"]}. Message: ${error.response.data.message}`)
}

Um den Statuscode und die Header anzuzeigen, verwenden Sie beim Senden Ihrer Anforderung die Option --include oder --i.

Diese Anfrage ruft z. B. eine Liste der Issues im Octocat/Spoon-Knife-Repository ab.

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--include

Und sie sendet einen Antwortcode und Header zurück, der ungefähr so aussieht:

HTTP/2 200
server: GitHub.com
date: Thu, 04 Aug 2022 20:07:51 GMT
content-type: application/json; charset=utf-8
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"7fceb7e8c958d3ec4d02524b042578dcc7b282192e6c939070f4a70390962e18"
x-github-media-type: github.v3; format=json
link: <https://api.github.com/repositories/1300192/issues?per_page=2&sort=updated&direction=asc&page=2>; rel="next", <https://api.github.com/repositories/1300192/issues?per_page=2&sort=updated&direction=asc&page=7409>; rel="last"
access-control-expose-headers: ETag, Link, Location, Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
x-ratelimit-limit: 15000
x-ratelimit-remaining: 14996
x-ratelimit-reset: 1659645535
x-ratelimit-resource: core
x-ratelimit-used: 4
accept-ranges: bytes
content-length: 4936
x-github-request-id: 14E0:4BC6:F1B8BA:208E317:62EC2715

In diesem Beispiel lautet der Antwortcode 200, d. h. die Anforderung war erfolgreich.

Informationen zum Antwortkörper

Bei vielen Endpunkten wird ein Antworttext zurückgesendet. Sofern nicht anders angegeben, verwendet der Antworttext das JSON-Format. Leere Felder werden als null aufgenommen, anstatt weggelassen zu werden. Alle Zeitstempel werden im UTC-Zeitformat nach ISO 8601 YYYY-MM-DDTHH:MM:SSZ zurückgesendet.

Im Gegensatz zur GraphQL-API, bei der du die gewünschten Informationen angibst, liefert die REST-API in der Regel mehr Informationen als du benötigst. Falls gewünscht, kannst du die Antwort analysieren, um bestimmte Informationen herauszufiltern.

Sie können zum Beispiel > verwenden, um die Antwort in eine Datei umzuleiten. Ersetzen Sie im folgenden Beispiel REPO-OWNER durch den Namen des Kontos, das das Repository besitzt, und REPO-NAME durch den Namen des Repositorys.

Shell
gh api \
--header 'Accept: application/vnd.github+json' \
--method GET /repos/REPO-OWNER/REPO-NAME/issues \
-F per_page=2 > data.json

Dann kannst mit jq den Titel und die Autoren-ID für jedes Issue abrufen:

Shell
jq '.[] | {title: .title, authorID: .user.id}' data.json

Die beiden vorherigen Befehle liefern eine Ausgabe ähnlich der folgenden:

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

Weitere Informationen zu jq findest du in der jq-Dokumentation.

Sie können zum Beispiel den Titel und die Autoren-ID für jedes Issue abrufen: Ersetzen Sie im folgenden Beispiel REPO-OWNER durch den Namen des Kontos, das das Repository besitzt, und REPO-NAME durch den Namen des Repositorys.

JavaScript
try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "REPO-OWNER",
    repo: "REPO-NAME",
    per_page: 2,
  });

  const titleAndAuthor = result.data.map(issue => {title: issue.title, authorID: issue.user.id})

  console.log(titleAndAuthor)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Message: ${error.response.data.message}`)
}

Sie können zum Beispiel > verwenden, um die Antwort in eine Datei umzuleiten. Ersetzen Sie REPO-OWNER im folgenden Beispiel den Namen des Kontos, das das Repository besitzt, und REPO-NAME durch den Namen des Repositorys.

Shell
curl --request GET \
--url "https://api.github.com/repos/REPO-OWNER/REPO-NAME/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" > data.json

Dann kannst mit jq den Titel und die Autoren-ID für jedes Issue abrufen:

Shell
jq '.[] | {title: .title, authorID: .user.id}' data.json

Die beiden vorherigen Befehle liefern eine Ausgabe ähnlich der folgenden:

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

Weitere Informationen zu jq findest du in der jq-Dokumentation.

Detaillierte Darstellungen im Vergleich zu Zusammenfassungsdarstellungen

Eine Antwort kann alle Attribute für eine Ressource oder nur eine Teilmenge von Attributen enthalten, je nachdem, ob Sie eine einzelne Ressource oder eine Liste von Ressourcen fetchen.

  • Wenn Sie eine einzelne Ressource z. B. ein bestimmtes Repository, abrufen, enthält die Antwort in der Regel alle Attribute für diese Ressource. Dies ist die „detaillierte“ Darstellung der Ressource.
  • Wenn Sie eine Liste von Ressourcen fetchen, z. B. eine Liste mehrerer Repositorys, enthält die Antwort nur eine Teilmenge der Attribute für jede Ressource. Dies ist die „Zusammenfassungsdarstellung“ der Ressource.

Beachten Sie, dass die Autorisierung manchmal die Anzahl der Details in einer Darstellung beeinflusst.

Der Grund dafür ist, dass einige Attribute für die bereitzustellende API rechenintensiv sind, sodass GitHub diese Attribute aus der Zusammenfassungsdarstellung ausgeschlossen werden. Um diese Attribute zu erhalten, können Sie die detaillierte Darstellung abrufen.

Die Dokumentation enthält eine Beispielantwort für jede API-Methode. Die Beispielantwort zeigt alle Attribute an, die von dieser Methode zurückgegeben werden.

Hypermedia

Alle Ressourcen verfügen möglicherweise über eine oder mehrere *_url-Eigenschaften, die sie mit anderen Ressourcen verknüpfen. Hiermit sollen explizite URLs bereitgestellt werden, damit richtige API-Clients keine URLs selbst erstellen müssen. Es wird dringend empfohlen, dass API-Clients diese verwenden. Auf diese Weise werden zukünftige Upgrades der API für Entwickler*innen einfacher. Es wird erwartet, dass alle URLs ordnungsgemäße RFC 6570-URI-Vorlagen sind.

Anschließend kannst du diese Vorlagen mithilfe des uri_template-Gems erweitern:

>> tmpl = URITemplate.new('/notifications{?since,all,participating}')
>> tmpl.expand
=> "/notifications"

>> tmpl.expand all: 1
=> "/notifications?all=1"

>> tmpl.expand all: 1, participating: 1
=> "/notifications?all=1&participating=1"

Ratenbegrenzung

Die GitHub REST-API beschränkt die Anzahl der Anforderungen, die Sie innerhalb eines bestimmten Zeitraums vornehmen können. Weitere Informationen zu Ratelimits und zum Überprüfen des aktuellen Status des Zinsgrenzwerts finden Sie unter Ratenbegrenzungen für die REST-API.

Nächste Schritte

In diesem Artikel wurde gezeigt, wie du Issues in einem Repository auflisten und erstellen kannst. Um mehr Übung zu bekommen, kannst du versuchen, ein Issue zu kommentieren, den Titel eines Issue zu bearbeiten oder ein Issue zu schließen. Weitere Informationen finden Sie unter dem Endpunkt „Erstellen eines Kommentars zu einem Issue“ und Endpunkt „Aktualisieren eines Issues“.

Weitere Informationen zu anderen Endpunkten, die Sie verwenden können, finden Sie in der REST-Referenzdokumentation.