Es gibt viele Open-Source-Architekturstandards zum Erstellen und Verteilen von Anwendungen. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) und GraphQL-APIs sind die beliebtesten.
RESTful-APIs sind der am häufigsten verwendete API-Architekturstandard. Wenn Sie komplexe RESTful-APIs mit vielen Endpunkten geschrieben haben, haben Sie wahrscheinlich erkannt, wie kompliziert sie sein können. Dies gilt insbesondere dann, wenn es nur geringfügige Unterschiede zwischen den Endpunkten gibt.
Es kann auch zu Problemen beim Abrufen von Daten kommen, da RESTful-APIs nicht flexibel genug sind, um bestimmte Daten auszuwählen. GraphQL löst diese Probleme von RESTful-APIs.
Was ist GraphQL?
GraphQL (Graph Query Language) ist eine Abfragesprache und Laufzeitumgebung zum Erstellen von APIs. Im Gegensatz zu REST-APIs mit vielen Endpunkten zum Konsumieren von Daten haben GraphQL-APIs einen Einstiegspunkt. Sie können bestimmte Daten abrufen, indem Sie sie in Abfragen beschreiben.
Der GraphQL-Spezifikation definiert die Abfragesprache und wie GraphQL-Server funktionieren. Sie können GraphQL-APIs in serverseitigen Sprachen von Python bis erstellen und nutzen Javascript, und jede Sprache, die HTTP unterstützt.
Meta hat GraphQL im Jahr 2012 als Alternative zu REST entwickelt, um auf HTTP aufzubauen. Sie haben GraphQL 2015 als Open-Source-Standard veröffentlicht. Heute überwacht die GraphQL Foundation die Entwicklung der GraphQL-Spezifikation.
GraphQL ist ziemlich neu, mit geringer Akzeptanz, und seine Verwendung ist mit versteckten Kosten verbunden. Das Erstellen von GraphQL-APIs kann unnötig komplex sein, insbesondere für kleine Projekte mit wenigen Endpunkten.
Außerdem geben alle GraphQL-Anforderungen letztendlich einen Statuscode von 200 zurück, unabhängig vom Status der Anforderung.
Wie funktioniert GraphQL?
nicht wie REST, das ressourcenorientiert ist, GraphQL erfordert, dass Sie Daten als Diagramm betrachten, um mit Daten zu interagieren. Sie können die Struktur der Daten angeben, und die Spezifikation bietet eine robuste Abfrageschnittstelle für die Interaktion mit der API über HTTP. Sie können verschiedene Funktionen je nach verwenden GraphQL-Paket oder -Bibliothek Sie entscheiden sich zu verwenden.
GraphQL-Schemas enthalten Objekttypen, die das anforderbare Objekt und seine verfügbaren Felder definieren. Bei API-Abfragen und -Mutationen validiert das GraphQL-Paket Abfragen und führt die Abfragen basierend auf den angegebenen Handler-Funktionen (Resolvern) aus.
Warum sollten Sie GraphQL verwenden?
REST ist ein benutzerfreundlicher Standard, und die meisten Programmiersprachen verfügen über Tools zum schnellen Erstellen von RESTful-APIs. Es gibt jedoch viele Probleme beim Erstellen und Verwenden von RESTful-APIs.
Hier sind einige der Probleme mit REST, die Entwickler dazu bringen, GraphQL für einige Anwendungsfälle zu bevorzugen.
Ineffizienter Datenabruf
RESTful-APIs leiten Daten basierend auf der Spezifikation des Endpunkts weiter. Sie sind nicht flexibel genug, um Daten abzurufen, die über das hinausgehen, was in der Handler-Funktion des Endpunkts fest codiert ist.
Angenommen, ein Endpunkt gibt eine Liste mit Abrufdaten zurück, und Sie müssen Werte oder Kriterien für Felder angeben. In diesem Fall muss der Entwickler einen Endpunkt erstellen und die Geschäftslogik definieren, um die Daten zurückzugeben. Sie können die wertvolle Ressource manuell parsen, was letztendlich mehr Zeit in Anspruch nimmt.
GraphQL löst das Problem des ineffizienten Datenabrufs, da Sie APIs abfragen können, um Daten basierend auf Kriterien und Spezifikationen flexibel zurückzugeben.
GraphQL-APIs sind interaktiv; Sie können die Daten, die Sie abrufen müssen, in einer einfachen, lesbaren Syntax angeben.
{
Benutzer (wobei: {Alter: {_eq: "89"}}) {
Name
Schule(Wo: {lebendig: {_eq: wahr}}) {
bio
Staatsangehörigkeit
}
}
}
Die obige GraphQL-Abfrage fragt a Benutzer Schema für Einträge, bei denen die Alter Feld ist 89. Die Abfrage hat eine eingebettete Abfrage für Einträge, bei denen die lebendig Feld wertet aus WAHR. Es gibt die Felder „Name“, „Biografie“ und „Nationalität“ aus dem Schema zurück.
Schnelle Entwicklung
Das Erstellen und Verwenden von GraphQL-APIs ist einfacher als die Verwendung von REST, insbesondere wenn die Projektgröße zunimmt. Während der Entwicklungsphase müssen Sie nicht so viele Routen und Handler-Funktionen entwickeln wie bei der Entwicklung von RESTful-APIs. Die Verwendung von GraphQL-APIs ist nicht so mühsam wie RESTful-APIs.
In REST geben verschiedene Endpunkte Zugriff auf verschiedene Ressourcen, im Gegensatz zu GraphQL, wo es einen einzigen Endpunkt gibt. Dies führt zu Flexibilität und Leistung, und Abfragen können verschiedene Auflösungsfunktionen aufrufen.
Die GraphQL-Schemadefinitionssprache
Die GraphQL Schema Definition Language (SDL) spezifiziert die Schemas für GraphQL-Dienste.
Die GraphQL-SDL-Syntax ist einfach zu lesen und zu verstehen. Sie geben die Struktur Ihres Schemas in einer Datei mit der .graphql oder .graphqls Verlängerung.
Typ Menschlich {
Name: Schnur!
Alter: Int!
}Eingabe AddHuman {
Name: Schnur!
Alter: Int!
}Typ Mutation {
CreateHuman (Eingabe: AddHuman!): Mensch!
DeleteHuman (ID: Int!): Schnur!
UpdateHuman (ID: Int!): Schnur!
}
Typ Anfrage {
GetHuman (id: Int!): Mensch!
GetHumans: [Menschlich!]!
}
Der obige GraphQL-Code ist das Schema für eine GraphQL-API, das die Struktur der API für Anfragen definiert. Das Schema definiert die CRUD-Funktionalität für die API.
Auf der Clientseite kann der Client basierend auf der Struktur des Schemas und den Daten oder Operationen des Clients Folgendes ausführen: Anfrage (GET oder DELETE in REST) oder a Mutation (PUT oder POST).
Hier ist ein Beispiel für die Abfrage von Menschlich Schema.
Abfrage Mensch {
Name
Alter
}
Die obige Abfrage würde die menschlichen Schemas zurückgeben Name Und Alter Felddaten.
GraphQL-Mutationen haben im Gegensatz zu Abfragen eine ziemlich andere Syntax. Hier ist ein Beispiel für eine Mutationsoperation auf der Menschlich Schema.
Mutation {
CreateHuman (Eingabe: { Name:"Mann", Alter: 100000000000000,}) {
Name
Alter
}
}
Die Mutationscodeeingaben Name Und Alter Felder an den Client und gibt die Daten aus den Feldern zurück.
Sie benötigen einen Datenspeicher für Persistenz, wenn Sie Ihre GraphQL-API erstellen. Wie REST und die meisten HTTP-basierten Webarchitekturen ist GraphQL zustandslos, und Sie können jeden Datenspeicher oder jede Datenbank für Ihre App verwenden.
Erstellen einer GraphQL-API
GraphQL ist eine Spezifikation, und Sie können GraphQL in den beliebtesten serverseitigen Sprachen erstellen. Sie müssen eine Bibliothek mit den Funktionen finden, die Sie für Ihr Projekt benötigen.
Wenn Sie sich für eine GraphQL-Bibliothek entscheiden, möchten Sie eine funktionsreiche Bibliothek verwenden, die alle GraphQL-Typen und -Operationen unterstützt. Die meisten Bibliotheken verfolgen entweder einen Schema-First- oder einen Code-First-Ansatz. In ersterem definieren Sie ein GraphQL-Schema, und die Bibliothek generiert Resolver und Boilerplate-Code. Für letzteres codieren Sie die Resolver hart, ohne ein Schema zu definieren.
GraphQL wird immer beliebter
Seit der Einführung von GraphQL haben Entwickler und Unternehmen Tools veröffentlicht, um die Verwendung zu vereinfachen. Diese können die Entwicklungszeit für kleinere und mittlere Projekte verkürzen.
Sie können sich die Open-Source-GraphQL-Clients, die GraphQL-Dokumentation und ihre Spezifikation ansehen, um mehr zu erfahren.