Schnittstelle mit Github -API mit Python 3

Schnittstelle mit Github -API mit Python 3
Github als Webanwendung ist eine riesige und komplexe Einheit. Denken Sie an alle Repositorys, Benutzer, Filialen, Commits, Kommentare, SSH -Schlüssel und Apps von Drittanbietern, die Teil davon sind. Darüber hinaus gibt es mehrere Möglichkeiten, damit zu kommunizieren. Es gibt Desktop -Apps für GitHub, Erweiterungen für Visual Studio Code und Atom Editor, Git CLI, Android und iOS -Apps, um nur einige zu nennen.

Menschen bei GitHub und Entwickler von Drittanbietern können unmöglich diese Komplexität ohne eine gemeinsame Schnittstelle bewältigen. Diese gemeinsame Schnittstelle nennen wir die Github -API. Jedes GitHub -Dienstprogramm wie eine CLI, Web -Benutzeroberfläche usw. verwendet diese eine gemeinsame Schnittstelle, um Ressourcen zu verwalten (Ressourcen sind Entitäten wie Repositories, SSH -Tasten usw.).

In diesem Tutorial lernen wir einige Grundlagen dafür. Die neueste V4 der Github -API erfordert, dass Sie etwas über GraphQL erfahren, was zu einer steileren Lernkurve führt. Also werde ich mich an nur Version drei halten, die noch aktiv und ziemlich beliebt ist.

Wie man mit einer Web -API spricht

Web -APIs ermöglichen es Ihnen, alle von einer Web -App angebotenen Dienste wie GitHub zu nutzen, die programmgesteuert mithilfe der Sprache Ihrer Wahl verwendet werden. Zum Beispiel werden wir Python für unseren Anwendungsfall hier verwenden. Technisch gesehen können Sie mithilfe der API alles, was Sie auf Github tun.

Ihr Python -Programm wird genauso mit einer API sprechen, wie Ihr Browser mit einer Website spricht. Das heißt, meistens über HTTPS -Anfragen. Diese Anfragen enthalten unterschiedliche "Teile", beginnend mit der Methode der Anforderung [Get, Post, Löschen], die URL selbst, eine Abfragezeichenfolge, ein HTTP -Header und eine Körperschaft oder eine Nutzlast. Die meisten davon sind optional. Wir müssen jedoch eine Anforderungsmethode und die URL bereitstellen, an die wir die Anfrage stellen.

Was diese sind und wie sie in einer HTTPS -Anfrage dargestellt werden, werden wir langsam sehen, wenn wir anfangen, Python -Skripte zu schreiben, um mit GitHub zu interagieren.

Ein Beispiel

Das Hinzufügen von SSH -Tasten zu einem neu erstellten Server ist immer ein ungeschickter Prozess. Schreiben wir ein Python -Skript, das Ihre öffentlichen SSH -Tasten aus GitHub abgerufen und der Datei autorized_keys auf einem beliebigen Linux- oder Unix -Server hinzufügen, auf dem Sie dieses Skript ausführen. Wenn Sie nicht wissen, wie Sie SSH -Tasten generieren oder verwenden sollen, finden Sie hier einen ausgezeichneten Artikel darüber. Ich werde annehmen, dass Sie Ihren eigenen SSH -Tasten zu Ihrem GitHub -Konto erstellt und hinzugefügt haben.

Eine sehr einfache und naive Python -Implementierung, um die oben beschriebene Aufgabe zu erreichen, ist wie unten gezeigt:

Anfragen importieren
OS importieren
# Benutzereingabe erhalten
UNIX_USER = Eingabe ("Geben Sie Ihren Unix -Benutzernamen ein:")
github_user = input ("Geben Sie Ihren Github -Benutzernamen ein:")
# Sicherstellen, dass .Das SSH -Verzeichnis existiert und eröffnet die Datei autorized_keys
ssh_dir = '/home/'+unix_user+'/.ssh/'
wenn nicht os.Weg.existiert (ssh_dir):
Betriebssystem.Makedirs (SSH_DIR)
autorized_keys_file = open (ssh_dir+'authorized_keys', 'a')
# Senden Sie eine Anfrage an die GIHUB -API und speichern Sie die Antwort in einer Variablen namens'Response ''
api_root = "https: // api.Github.com "
Request_header = 'Accept': 'Application/VND.Github.v3+json '
Antwort = Anfragen.get (api_root+'/user/'+github_user+'/keys', Headers = Request_header)
## Verarbeitung der Antwort und Anhängertaste an die Datei autorized_keys
für mich als Antwort.JSON ():
autorized_keys_file.Schreiben (i ['Schlüssel']+'\ n')

Lassen Sie uns die Handhabung der Python -Datei und verschiedene Details ignorieren und auf Anfrage und Antwort streng betrachten. Zuerst haben wir die Anfragen importieren, dass ein Importanfragen mit dieser Bibliothek API -Anrufe sehr einfach tätigen können. Diese Bibliothek ist auch eines der besten Beispiele für ein Open -Source -Projekt, das richtig gemacht wurde. Hier ist die offizielle Site, falls Sie sich die Dokumente genauer ansehen möchten.

Als nächstes setzen wir eine variable api_root.

api_root = "https: // api.Github.com "

Dies ist das gemeinsame Substring in allen URLs, zu denen wir API -Anrufe machen werden. Anstatt „https: // api zu tippen.Github.Com ”Jedes Mal, wenn wir auf https: // api zugreifen müssen.Github.com/user oder https: // api.Github.com/ user/ wir schreiben nur api_root+'/user/' ' oder api_root+'/user/' ', Wie im Code -Snippet gezeigt.

Als nächstes setzen wir den Header in unserer HTTPS. Github würde diese Header -Informationen respektieren.

Anfrage erhalten

Nachdem wir unsere URL und (eine optionale) Header -Informationen in verschiedenen Variablen gespeichert haben, ist es an der Zeit, die Anfrage zu stellen.

Antwort = Anfragen.get (api_root+'/user/'+github_user+'/keys', Headers = Request_header)

Die Anfrage ist vom Typ "Get", da wir öffentlich verfügbare Informationen von GitHub lesen. Wenn Sie etwas unter Ihrem GitHub -Benutzerkonto schreiben würden, würden Sie Post verwenden. In ähnlicher Weise sind andere Methoden für andere Funktionen wie Delete bestimmt, um Ressourcen wie Repositorys zu löschen.

API -Endpunkt

Der API -Endpunkt, für den wir uns wenden, ist:

https: // api.Github.com/user//Schlüssel

Jede Github -Ressource hat einen eigenen API -Endpunkt. Ihre Anfragen nach Get, Put, Löschen usw. werden dann gegen den von Ihnen gelieferten Endpunkt gestellt. Abhängig vom Zugriffsgrad, den Sie haben.

Die meisten Organisationen und Benutzer von GitHub setzen eine große Menge an Informationen zu lesbar und öffentlich. Zum Beispiel hat mein GitHub -Benutzerkonto ein paar öffentliche Repositories und öffentliche SSH -Schlüssel, die jeder zugreifen kann (auch ohne GitHub -Benutzerkonto). Wenn Sie eine feinkörnigere Kontrolle über Ihr persönliches Konto haben möchten, können Sie ein „persönliches Zugriffstoken“ generieren, um privilegierte Informationen zu lesen und zu schreiben, die in Ihrem persönlichen Github-Konto gespeichert sind. Wenn Sie eine Anwendung von Drittanbietern schreiben, die von anderen als Ihnen verwendet werden soll, dann ist ein OAuth -Token des genannten Benutzer.

Wie Sie jedoch sehen können, können auf viele nützliche Informationen zugegriffen werden, ohne Token zu erstellen.

Antwort

Die Antwort wird vom Github -API -Server zurückgegeben und in der Variablen mit dem Namen Antwort gespeichert. Die gesamte Antwort könnte auf verschiedene Weise gelesen werden, wie hier dokumentiert. Wir haben ausdrücklich nach JSON -Typ -Inhalten aus GitHub gefragt, damit wir die Anfrage bearbeiten, als ob es JSON ist. Zu diesem Zweck nennen wir die JSON ().

Sie können sehen, dass die Schlüssel an die Datei Authorized_keys in dieser für Loop angehängt werden:

für mich als Antwort.JSON ():
autorized_keys_file.Schreiben (i ['Schlüssel']+'\ n')

Wenn Sie die Antwort drucken.JSON () Objekt werden Sie feststellen, dass es sich um eine Python -Liste mit Python -Wörterbüchern als Mitglieder handelt. Jedes Wörterbuch hat einen Schlüssel mit dem Namen "Schlüssel" mit Ihrem öffentlichen SSH -Schlüssel als Wert für diesen Schlüssel. So können Sie diese Werte einzeln an Ihre Datei autorized_keys anhängen. Und jetzt können Sie von jedem Computer, auf dem jemand die privaten SSH -Tasten entspricht, die einem der gerade angehängten öffentlichen Schlüssel entsprechen.

Weiter erforschen

Eine Menge Arbeit mit APIs beinhaltet eine sorgfältige Prüfung der API -Dokumentation selbst mehr als das Schreiben von Codezeilen. Im Falle von GitHub ist die Dokumentation eine der besten in der Branche. Das Lesen von API -Dokumenten und das Erstellen von API -Aufrufen mit Python ist jedoch eher uninteressant als eigenständige Aktivität.

Bevor Sie weiter gehen, würde ich Ihnen empfehlen, eine Aufgabe zu finden, die Sie mit Python auf Ihrem Github -Konto ausführen möchten. Versuchen Sie dann, es zu implementieren, indem Sie nur die von Python, seine abhängigen Bibliotheken und Github bereitgestellten offiziellen Dokumentationen lesen. Dies hilft Ihnen auch, eine gesündere Denkweise einzunehmen, in der Sie verstehen.