Autor: Jochen Möller (Geschäftsführer und CoFounder von EcholoN) - Erstellung: 07.03.2023, letzte Änderung: 28.03.2024
Willkommen zu unserem umfassenden Artikel über GraphQL! In diesem Artikel werden wir die Grundlagen von GraphQL erklären und es mit REST vergleichen. GraphQL ist eine moderne Abfragesprache für APIs, die von Facebook entwickelt wurde. Es bietet viele Vorteile gegenüber herkömmlichen REST APIs und wird von Entwicklern auf der ganzen Welt immer häufiger eingesetzt.
GraphQL ist eine moderne Abfragesprache für APIs. Es wurde 2012 von Facebook entwickelt und ermöglicht es Entwicklern, effizienter auf Daten zuzugreifen und nur die benötigten Daten abzurufen. Im Gegensatz zu REST, bei dem mehrere Endpunkte existieren können, hat GraphQL einen einzigen Endpunkt, über den alle Abfragen abgerufen werden können.
Im Vergleich zu REST APIs bietet GraphQL einige Vorteile. Während bei REST APIs oft Overfetching oder Underfetching von Daten auftritt, ermöglicht GraphQL eine präzise Abfrage und Rückgabe von Daten. Mit GraphQL können Entwickler genau angeben, welche Daten sie benötigen, und erhalten nur diese Daten zurück. Dies führt zu effizienter Datenmanipulation und einer optimierten Datenabfrage.
GraphQL bietet viele Vorteile gegenüber REST APIs. Es ermöglicht eine effiziente Datenabfrage, da nur die benötigten Daten abgefragt werden. Außerdem ist GraphQL sehr flexibel und erlaubt es Entwicklern, komplexe Abfragen mit nur einer einzigen Anfrage zu erstellen. Darüber hinaus unterstützt GraphQL verschiedene Programmiersprachen wie Javascript, Python und Ruby. Es gibt auch eine aktive Community, die GraphQL unterstützt und weiterentwickelt, wie die GraphQL Foundation.
Das Herzstück von GraphQL ist das Schema. Das Schema definiert die Struktur der Daten und die möglichen Abfragen, die gestellt werden können. Das Typsystem von GraphQL ermöglicht es Entwicklern, klare und verständliche API-Schnittstellen zu erstellen. Die Daten werden in Form von Objekten und Feldern definiert, die wiederum miteinander verknüpft werden können.
Die Syntax von GraphQL ähnelt der von JSON. Abfragen werden in Form von sogenannten "Queries" gestellt. Eine GraphQL-Abfrage definiert die gewünschten Daten und ihre Struktur. Es ist auch möglich, Variablen in Abfragen zu verwenden, um die Flexibilität weiter zu erhöhen. Mit GraphQL können Daten auch mutiert werden, indem sie über sogenannte "Mutations" geändert, hinzugefügt oder gelöscht werden. Subscriptions ermöglichen es, ähnlich wie WebSockets, Echtzeit-Updates zu erhalten, indem sie einen permanenten Verbindungskanal zwischen Client und Server aufbauen.
Um mit GraphQL zu arbeiten, benötigt man einen GraphQL-Client. Ein GraphQL-Client ist eine Softwarebibliothek, mit der Abfragen an eine GraphQL-API gesendet werden können. Der Client übernimmt die Kommunikation mit dem GraphQL-Server und verarbeitet die Abfragen und Antworten. GraphQL unterstützt mehrere Endpunkte, was es Entwicklern ermöglicht, verschiedene Funktionen innerhalb einer Anwendung zu haben.
Eines der Hauptprobleme bei REST APIs ist Overfetching oder Underfetching von Daten. Overfetching tritt auf, wenn mehr Daten abgerufen werden als benötigt, während Underfetching bedeutet, dass nicht genügend Daten abgerufen werden. Mit GraphQL können Entwickler genau angeben, welche Daten sie benötigen, und erhalten nur diese Daten zurück. Dadurch wird Overfetching und Underfetching eliminiert und die Effizienz der Abfragen verbessert.
GraphQL ermöglicht nicht nur eine effiziente Abfrage von Daten, sondern auch eine effiziente Datenmanipulation. Mit GraphQL können Daten durch sogenannte "Mutations" bearbeitet oder hinzugefügt werden. Entwickler können genau spezifizieren, welche Änderungen vorgenommen werden sollen, und erhalten nur die relevanten Informationen zurück.
GraphQL ermöglicht eine optimierte Datenabfrage, da nur die benötigten Daten abgerufen werden. Dadurch entfällt das lästige Durchsuchen von ungenutzten Daten. Außerdem können Entwickler komplexe Abfragen mit nur einer einzigen Anfrage erstellen, was zu einer verbesserten Performance führt. Diese Flexibilität ermöglicht es den Entwicklern auch, die Datenabfrage zu optimieren und die Antwortzeit zu verbessern.
GraphQL wird durch verschiedene Programmiersprachen wie JavaScript, Python und Ruby unterstützt. REST wird durch die lange Marktzugehörigkeit auch durch verschiedenste Programmiersprachen unterstützt. Entwickler können die Sprache wählen, die am besten zu ihrer Anwendung passt.
Der Datenabfrageprozess unterscheidet sich stark zwischen GraphQL und REST. Bei REST müssen Entwickler mehrere Endpunkte aufrufen, um alle benötigten Daten abzurufen. Mit GraphQL kann alles in einer einzigen Abfrage abgerufen werden, was die Effizienz verbessert und den Datenverkehr reduziert.
Sowohl GraphQL als auch REST haben ihre Vor- und Nachteile in Bezug auf die Entwicklerfreundlichkeit. GraphQL bietet eine klare und verständliche API-Schnittstelle, während REST mehr Freiheit bei der Gestaltung der API bietet. Die Wahl zwischen GraphQL und REST hängt von den Anforderungen des Projekts und den Präferenzen der Entwickler ab.
Die Verwendung von GraphQL zur Datenübertragung bietet viele Vorteile, birgt jedoch auch einige Risiken und Herausforderungen, die bei der Entwicklung und Implementierung berücksichtigt werden sollten.
Hier sind einige der Risiken im Zusammenhang mit der Anwendung von GraphQL:
Um GraphQL in einer JavaScript-Anwendung zu verwenden, benötigt man einen GraphQL-Client wie Apollo Client oder Relay. Diese Clients ermöglichen die Kommunikation mit der GraphQL-API und das Senden von Abfragen und Mutationen. Mit GraphQL können Entwickler präzise Abfragen erstellen und nur die benötigten Daten abrufen.
GraphQL kann auch in eine Cloud-Umgebung integriert werden. Cloud-Hosting-Plattformen wie AWS und Heroku bieten Unterstützung für GraphQL-Anwendungen. Entwickler können ihre GraphQL-APIs in der Cloud hosten und von den Vorteilen einer skalierbaren und zuverlässigen Infrastruktur profitieren.
Mit GraphQL können Entwickler genau spezifizieren, welche Daten sie benötigen, und erhalten nur diese Daten zurück. Dies ermöglicht eine effiziente Datenabfrage und reduziert den Datenverkehr. Entwickler können auch komplexe Abfragen mit nur einer einzigen Anfrage erstellen, was zu einer verbesserten Performance führt.
APIs für mobile Apps und Webanwendungen: GraphQL eignet sich besonders gut für Anwendungen, die unterschiedliche Datenanforderungen haben, da Clients nur die Daten abrufen können, die sie tatsächlich benötigen. Dies trägt dazu bei, die Leistung der Anwendungen zu optimieren.
Entwicklungsprozesse: GraphQL erleichtert die Zusammenarbeit zwischen Frontend- und Backend-Entwicklern, da beide Teams unabhängig voneinander arbeiten können. Frontend-Entwickler können die Datenanforderungen direkt in ihren Abfragen definieren, ohne auf Backend-Änderungen warten zu müssen.
Datenzusammenführung (Data Stitching): Mit GraphQL können Daten aus verschiedenen Quellen, wie Datenbanken, RESTful APIs und Microservices, in einer einzigen Abfrage zusammengeführt werden. Dies ermöglicht es, einheitliche Schnittstellen für komplexe Systeme zu erstellen.
Realtime-Webanwendungen: GraphQL kann mit WebSockets oder anderen Echtzeittechnologien integriert werden, um Echtzeitaktualisierungen in Webanwendungen zu ermöglichen, beispielsweise in sozialen Netzwerken oder Chat-Anwendungen.
Prototyping und Experimentieren: GraphQL erleichtert das Prototyping von API-Endpunkten und das Experimentieren mit neuen Funktionen, da Entwickler problemlos neue Felder und Abfragen hinzufügen können, ohne die bestehende API zu beeinträchtigen.
Client-Bibliotheken: Es gibt zahlreiche Client-Bibliotheken für verschiedene Plattformen und Programmiersprachen, die die Verwendung von GraphQL in Anwendungen erleichtern.
Insgesamt bietet GraphQL eine effiziente Möglichkeit, Daten zwischen Clients und Servern auszutauschen und ermöglicht eine höhere Flexibilität und Kontrolle über die abgerufenen Daten, was insbesondere in modernen Web- und Mobilanwendungen von Vorteil ist.
Die EcholoN-API verwendet GraphQL, um Abfragen und Mutationen durchzuführen. Mit Queries können Informationen von der Datenbank abgerufen werden. Dabei können spezifische Felder definiert werden, um nur die erforderlichen Daten zu erhalten. Dies trägt dazu bei, die Effizienz der Abfragen zu maximieren und den Netzwerkverkehr zu minimieren. Auf der anderen Seite ermöglichen Mutations das Ändern von Daten in der Datenbank. Dadurch können Benutzer neue Daten erstellen, vorhandene Daten aktualisieren oder sogar löschen. So können dann z.B. Prozesse-Vorlagen mit Workflows und / oder Tätigkeitsmuster in der Workflow-Engine angesprochen werden. Subscriptions erlauben es, ähnlich wie WebSockets, aktuelle Informationen in Echtzeit zu erhalten, indem sie einen dauerhaften Verbindungskanal zwischen dem Client und dem Server herstellen. Durch die Verwendung von GraphQL in der EcholoN-API wird die Flexibilität und Leistungsfähigkeit des Systems verbessert.
{
views {
incidents(skip: 2, first: 2, orderBy: ["number_asc"]) {
id {
entityId
itemId
}
number
name
}
}
}
Antwort
{
"data": {
"views": {
"incidents": [
{
"id": {
"entityId": "81986bf1-6e94-405d-b9c3-2a2eeb691d88",
"itemId": "39574653-eb5b-4276-a165-108953db1b08"
},
"number": "IM-000002",
"name": "Monitor flackert"
},
{
"id": {
"entityId": "81986bf1-6e94-405d-b9c3-2a2eeb691d88",
"itemId": "8956c73f-f91b-4234-9750-5785b52fda2e"
},
"number": "IM-000009",
"name": "Drucker druckt nicht "
}
]
}
}
}
mutation {
working {
enqueueChangeTargetDate {
latest(
input: {items: [
{reference: "myref1", identity: {entityId: "81986bf1-6e94-405d-b9c3-2a2eeb691d88", itemId: "9e1c3a25-1d7e-44ad-871f-f76750360fa7"}}],
title: "Change Date",
workedOn: "2023-09-06T11:00:00.000Z",
data: {targetDate: "2023-12-27T11:00:00.000Z"}}
) {
id
number
reference
statusCode
}
}
}
}
Antwort
{
"data": {
"working": {
"enqueueChangeTargetDate": {
"latest": [
{
"id": "c03d5902-4456-4e6b-8bcd-06643f4df6aa",
"number": 0,
"reference": "myref1",
"statusCode": "Pending"
}
]
}
}
}
}
Vielleicht auch noch interessant: