In einem der vorherigen Beiträge diskutierten wir kurz, wie es ist, die Github -API V3 zu verwenden. Diese Version ist so konzipiert, dass sie wie jede andere REST -API miteinander verbunden sein wird. Es gibt Endpunkte für jede Ressource, auf die Sie zugreifen und/oder ändern müssen. Es gibt Endpunkte für jeden Benutzer, jede Organisation, jedes Repository usw. Zum Beispiel hat jeder Benutzer seinen API -Endpunkt bei https: // api.Github.com/ user/ Sie können versuchen, Ihren Benutzernamen statt zu ersetzen und die URL in einem Browser einzugeben, um zu sehen, worauf die API reagiert.
Github API V4 hingegen verwendet GraphQL, wobei die QL für die Abfragesprache steht. GraphQL ist eine neue Art, Ihre APIs zu entwerfen. Genauso wie es viele Webdienste als Rest -APIs angeboten werden, nicht nur die von GitHub angebotenen, gibt es viele Webdienste, mit denen Sie über GraphQL mit ihnen mit ihnen einbinden können.
Der starke Unterschied, den Sie zwischen GraphQL und REST -API bemerken werden, besteht darin, dass GraphQL einen einzelnen API -Endpunkt abarbeiten kann. Im Falle von GitHub API V4 ist dieser Endpunkt https: // api.Github.com/graphql und das ist das. Sie müssen sich keine Sorgen machen, dass lange Saiten am Ende eines Root -URI angehängt werden oder ein Parameter für Abfragestöne für zusätzliche Informationen angibt. Sie senden einfach ein JSON -ähnliches Argument an diese API und fragen nur nach den Dingen, die Sie benötigen. Sie müssen sich nicht damit befassen, unerwünschte Informationen herauszufiltern oder aufgrund großer Antworten unter Leistungsaufwand zu leiden.
Was ist REST -API?
Nun, Rest steht für Repräsentationsstatustransfer und API für die Anwendungsprogrammierschnittstelle. Eine REST-API oder eine "erholsame" API ist zur Kern-Design-Philosophie für die meisten modernen Kunden-Server-Anwendungen geworden. Die Idee ergibt sich aus der Notwendigkeit, verschiedene Komponenten einer Anwendung wie die clientseitige Benutzeroberfläche und die serverseitige Logik zu trennen.
Die Sitzung zwischen einem Client und einem Server ist also normalerweise staatenlos. Sobald die Webseite und die zugehörigen Skripte geladen sind, können Sie weiterhin mit ihnen interagieren. Wie Benutzername, Token usw.). Die Anwendung wechselt von einem Zustand in einen anderen, jedoch ohne ständige Verbindung zwischen dem Client und dem Server.
Rest definiert eine Reihe von Einschränkungen zwischen dem Client und dem Server, und die Kommunikation kann nur unter diesen Einschränkungen erfolgen. Zum Beispiel verwendet Pause Over HTTP normalerweise das CRUD -Modell, das für Erstellen, Lesen, Aktualisieren und Löschen und HTTP. Alte Intrusion -Techniken wie SQL -Injektionen sind mit einer strengen Ruhestapion keine Möglichkeit (obwohl es sich bei der Ruhe nicht um ein Sicherheits -Allheilmittel handelt).
Es hilft UI -Entwicklern auch ziemlich viel! Da alles, was Sie von einer HTTP -Anfrage erhalten. Sie lesen die API-Dokumentation für Dienste wie Reddit, Twitter oder Facebook und können Erweiterungen für sie oder Kunden von Drittanbietern in der Sprache Ihrer Wahl schreiben.
Umgekehrt ist es dem Server egal, ob das Front-End in Go, Ruby oder Python geschrieben ist. Ob es sich um einen Browser, eine App oder ein CLI handelt. Es "sieht" nur die Anfrage und reagiert angemessen.
Was ist GraphQL?
Wie bei allem in der Welt der Computer wurde REST -APIs größer und komplexer und gleichzeitig wollten die Leute sie auf immer schneller und einfacher implementieren und konsumieren. Aus diesem Grund hat Facebook die Idee von GraphQL entwickelt und später offen gesammelt. Die QL in GraphQL steht für Abfragesprache.
Mit GraphQL können Clients sehr spezifische API -Anforderungen erstellen, anstatt starre API -Aufrufe mit vordefinierten Parametern und Antworten zu tätigen. Es ist viel einfacher, weil der Server dann genau mit den Daten reagiert, nach denen Sie ihn gefragt haben, mit nichts Überschuss.
Schauen Sie sich diese Ruheanforderung und ihre entsprechende Antwort an. Diese Anfrage soll nur die öffentliche Biografie eines Benutzers anzeigen.
Anfrage: Holen Sie sich https: // api.Github.com/user/
Antwort:
"Login": "Octocat",
"ID": 583231,
"node_id": "mdq6vxnlcju4mzizmq ==",
"avatar_url": "https: // avatars3.GithubuSercontent.com/u/583231?v = 4 ",
"gravatar_id": "",
"URL": "https: // api.Github.com/user/octocat ",
"html_url": "https: // github.com/octocat ",
"Follower_url": "https: // api.Github.com/user/octocat/Follower ",
"sequal_url": "https: // api.Github.com/user/octocat/folgen /other_user ",
"gists_url": "https: // api.Github.com/user/octocat/gist /gist_id ",
"Starred_url": "https: // api.Github.com/user/octocat/sternte /besitzer /repo ",
"subscriptions_url": "https: // api.Github.Com/Benutzer/Octocat/Abonnements ",
"organisations_url": "https: // api.Github.com/user/octocat/orgs ",
"repos_url": "https: // api.Github.com/user/octocat/repos ",
"events_url": "https: // api.Github.com/user/octocat/events /Privacy ",
"empfangen_events_url": "https: // api.Github.com/user/octocat/empfangen_events ",
"Typ": "Benutzer",
"Site_ADMIN": Falsch,
"Name": "The Octocat",
"Firma": "Github",
"Blog": "http: // www.Github.com/blog ",
"Ort": "San Francisco",
"E -Mail": Null,
"Hireable": Null,
"Bio": Null,
"public_repos": 8,
"public_gists": 8,
"Anhänger": 2455,
"folgen": 9,
"erstellt_at": "2011-01-25t18: 44: 36Z",
"updated_at": "2018-11-22t16: 00: 23Z"
Ich habe den Benutzernamen Octocat verwendet, aber Sie können ihn durch den Benutzernamen Ihrer Wahl ersetzen und Curl verwenden, um diese Anfrage in der Befehlszeile oder in der Postboten zu stellen, wenn Sie eine GUI benötigen. Während die Anfrage einfach war, denken Sie an alle zusätzlichen Informationen, die Sie aus dieser Antwort erhalten. Wenn Sie Daten von einer Million solcher Benutzer verarbeiten und alle unnötigen Daten verwenden, ist dies nicht effizient. Sie verschwenden Bandbreite, Speicher und Berechnen beim Erhalten, Speichern und Abfiltern aller Millionen zusätzlichen Schlüsselwertpaare, die Sie niemals Sie werden
Auch die Struktur der Antwort ist nicht etwas, das Sie vorher wissen,. Diese JSON -Antwort entspricht dem Wörterbuchobjekt in Python oder einem Objekt in JavaScript. Andere Endpunkte antworten mit JSON -Objekten, die möglicherweise aus verschachtelten Objekten, verschachtelten Liste innerhalb des Objekts oder einer beliebigen Kombination von JSON -Datentypen bestehen, und Sie müssen die Dokumentation verweisen, um die Einzelheiten zu erhalten. Wenn Sie die Anfrage bearbeiten, müssen Sie dieses Format bewusst sein, das sich von Endpunkt zu Endpunkt ändert.
GraphQL beruht nicht auf HTTP -Verben wie Post, Get, Put und Löschen, um CRUD -Operationen auf dem Server auszuführen. Stattdessen gibt es nur einen Typ von HTTP -Anforderungsart und Endopint für alle CRUD -bezogenen Operationen. Im Falle von GitHub beinhaltet dies Anfragen vom Typ Post mit nur einem Endpunkt https: // api.Github.com/graphql
Als Post -Anfrage kann es einen JSON -ähnlichen Text mit dem Text mit sich bringen, durch den unsere GraphQL -Operationen sein werden. Diese Operationen können von Typen sein Anfrage Wenn es nur einige Informationen lesen möchte, oder es kann ein sein Mutation Falls Daten geändert werden müssen.
Um GraphQL -API -Aufrufe zu tätigen, können Sie den GitHub -GraphQL Explorer verwenden. Schauen Sie sich diesen GraphQL an Anfrage So holen Sie dieselbe Art von Daten (die öffentliche Biografie eines Benutzers) wie oben mit Rest.
Anfrage: post https: // api.Github.com/graphql
Anfrage
Benutzer (Login: "Ranvo")
Bio
Antwort:
"Daten":
"Benutzer":
"Bio": "Tech- und Wissenschaftsliebhaber. Ich bin auf alle möglichen nicht verwandten Sachen von
Server zur Quantenphysik.\ r \ noccasional schreibe ich Blog -Beiträge zu den oben genannten Interessen."
Wie Sie sehen können, besteht die Antwort nur aus dem, was Sie verlangt haben. Das ist die Biografie des Benutzers. Sie wählen einen bestimmten Benutzer aus, indem Sie den Benutzernamen übergeben (in meinem Fall ist dies Ranvo) Und dann fragen Sie nach dem Wert eines Attributs dieses Benutzers, in diesem Fall dieses Attribut Bio. Der API -Server sucht genau die spezifischen Informationen und reagiert damit und nichts anderes.
Auf der anderen Seite können Sie auch eine einzige Anfrage stellen und Informationen extrahieren. Erinnern Sie sich daran, dass alle GraphQL -Anfragen nur an einen API -Endpunkt gestellt werden. Nehmen Sie zum Beispiel den Anwendungsfall, in dem Sie den GitHub -API -Server nach der Biografie des Benutzers und eines seiner SSH -Tasten fragen müssen. Es müsste zwei Retquests erhalten.
Ruheanfragen: Holen Sie sich https: // api.Github.com//
Holen Sie sich https: // api.Github.com//Schlüssel
GraphQL Anfrage: post https: // api.Github.com/graphql/
Anfrage
Benutzer (Login: "Ranvo")
Bio
publickeys (letztes: 1)
Kanten
Knoten
Taste
GraphQL -Antwort:
"Daten":
"Benutzer":
"Bio": "Tech- und Wissenschaftsliebhaber. Ich bin auf alle möglichen nicht verwandten Sachen von
Server zur Quantenphysik.\ r \ noccasional schreibe ich Blog -Beiträge zu den oben genannten Interessen.",
"publickeys":
"Kanten": [
"Knoten":
"Key": "SSH-ED25519 AAAAC3NZAC1LZDI1NTE5AAAAAIH31MVJRYDZEH8OD8JVAFPRUIGL65SWILYKPEGBungot"
]
Es gibt verschachteltes Objekt, aber wenn Sie sich Ihre Anfrage ansehen, stimmen sie so ziemlich mit Ihrer Anfrage überein, damit Sie es wissen und in gewissem Sinne die Struktur der Antwort formen, die Sie erhalten .
GraphQL kommt mit einer eigenen Lernkurve, die sehr steil oder gar nicht steil ist, je nachdem, wer Sie fragen, dass Sie fragen. Aus objektiver Sicht kann ich die folgenden Fakten für Sie legen. Es ist flexibel, wie Sie oben gesehen haben, es ist introspektiv - das heißt, Sie können die GraphQL -API über die API selbst abfragen. Auch wenn Sie Ihren API -Server nicht verwenden, müssen Sie mit einer API eine Schnittstelle haben, die nur GraphQL zulässt.
Sie können hier ein bisschen mehr über seine technischen Daten erfahren und wenn Sie GraphQL -API -Anrufe von Ihrer lokalen Workstation tätigen möchten, verwenden Sie GraphiQL.