Nachteile:
- Sie müssen lernen, wie Sie GraphQL einrichten. Das Ökosystem entwickelt sich immer noch schnell, so dass Sie Schritt halten müssen.
- Sie müssen die Abfragen vom Client senden. Sie können nur Zeichenfolgen senden. Wenn Sie jedoch mehr Komfort und Caching wünschen, verwenden Sie eine Clientbibliothek -> zusätzlichen Code in Ihrem Client
- Sie müssen das Schema vorher definieren => zusätzliche Arbeit, bevor Sie Ergebnisse erhalten
- Sie benötigen einen graphql-Endpunkt auf Ihrem Server => neue Bibliotheken , die Sie noch nicht kennen
- Graphql-Abfragen sind mehr Bytes als nur ein REST-Endpunkt
- Der Server muss mehr Verarbeitung durchführen , um die Abfrage zu analysieren und die Parameter zu überprüfen
Dies wird jedoch mehr als konterkariert:
- GraphQL ist nicht so schwer zu lernen
- Der zusätzliche Code beträgt nur wenige KB
- Indem Sie ein Schema definieren, verhindern Sie viel mehr Arbeit, nachdem Sie Fehler behoben und haarige Upgrades durchgeführt haben
- Es gibt viele Leute, die zu GraphQL wechseln, so dass sich ein reichhaltiges Ökosystem mit hervorragenden Werkzeugen entwickelt
- Wenn Sie in der Produktion persistente Abfragen verwenden (indem Sie GraphQL-Abfragen einfach durch eine ID und Parameter ersetzen), senden Sie tatsächlich weniger Bytes als mit REST
- Die zusätzliche Verarbeitung für eingehende Anfragen ist vernachlässigbar
- Die Bereitstellung einer sauberen Entkopplung von API und Backend ermöglicht eine viel schnellere Iteration bei Backend-Verbesserungen
graphql-spring-boot-starter
undgraphql-java-tools
loslegen. Erstellen Sie Ihr Schema in der Ressource .graphqls und erstellen Sie Resolver-Klassen. Fertig. Es dauerte ungefähr 10 Minuten, um ein funktionierendes Testbeispiel zum Laufen zu bringen.Ich habe einige wichtige Bedenken für alle gefunden, die über die Verwendung von GraphQL nachdenken , und bis jetzt sind die wichtigsten Punkte:
Abfrage in unbestimmter Tiefe : GraphQL kann nicht in unbestimmter Tiefe abfragen. Wenn Sie also einen Baum haben und einen Zweig zurückgeben möchten, ohne die Tiefe zu kennen, müssen Sie eine Paginierung durchführen.
Spezifische Antwortstruktur : In GraphQL entspricht die Antwort der Form der Abfrage. Wenn Sie also in einer sehr spezifischen Struktur antworten müssen, müssen Sie eine Transformationsebene hinzufügen, um die Antwort neu zu formen.
Cache auf Netzwerkebene : Aufgrund der üblichen Verwendung von GraphQL über HTTP (ein POST auf einem einzelnen Endpunkt) wird der Cache auf Netzwerkebene schwierig. Eine Möglichkeit, dies zu lösen, ist die Verwendung von persistierten Abfragen.
Datei - Upload - Handhabung : Es gibt nichts über Datei - Upload in der GraphQL Spezifikation und Mutationen keine Dateien in den Argumenten akzeptieren. Um dies zu lösen, können Sie Dateien mit anderen APIs (wie REST) hochladen und die URL der hochgeladenen Datei an die GraphQL-Mutation übergeben oder die Datei in den Ausführungskontext einfügen, sodass die Datei in den Resolver-Funktionen enthalten ist.
Unvorhersehbare Ausführung : Die Natur von GraphQL besteht darin, dass Sie die Kombination beliebiger Felder abfragen können. Diese Flexibilität ist jedoch nicht kostenlos. Es gibt einige Bedenken, die gut zu wissen sind, wie Leistung und N + 1-Abfragen.
Supereinfache APIs : Wenn Sie einen Service haben, der eine wirklich einfache API verfügbar macht, fügt GraphQL nur eine zusätzliche Komplexität hinzu, sodass eine einfache REST-API besser sein kann.
quelle
Das größte Problem , dass ich mit graphQL also sehen , ob Sie mit relationaler Datenbank verwenden , ist mit beitritt .
Die Tatsache, dass Sie einige Felder zulassen / nicht zulassen können, macht Verknüpfungen nicht trivial (nicht einfach). Was zu zusätzlichen Anfragen führt.
Auch verschachtelte Abfragen in graphql führen zu zirkulären Abfragen und können den Server zum Absturz bringen . Besondere Vorsicht ist geboten.
Die Ratenbegrenzung von Anrufen wird schwierig, da der Benutzer jetzt mehrere Abfragen in einem Anruf auslösen kann.
TIPP : Verwenden Sie Facebook-Dataloader die Anzahl der Abfragen bei javascript / Knoten zu reduzieren
quelle
cost
die Anforderung analysieren und zuweisen . Dies ist auch kein Problem, wenn Sie vordefinierte Abfragen verwenden, bei denen der Client nur die ID sendet.Es wird von Jahr zu Jahr besser und im Moment wächst die Community von GraphQL und infolgedessen gibt es viel mehr Lösungen für viele Probleme, die in anderen Antworten zuvor hervorgehoben wurden. Aber um zuzugeben, was Unternehmen immer noch davon abhält, alle Ressourcen auf GraphQL zu übertragen, möchte ich einige Probleme und Lösungen auflisten, gefolgt von ungelösten.
Es gibt jedoch noch einige weitere Fälle, die als Nachteile gewertet werden können:
Zusammenfassend ist GraphQL nur ein Werkzeug für bestimmte Ziele und mit Sicherheit kein Patentrezept für alle Probleme und natürlich kein Ersatz für REST.
quelle
Es ist wirklich großartig, einen einzigen Endpunkt zu haben und alle Daten verfügbar zu machen. Ich finde folgende Punkte, die für GraphQL berücksichtigt werden müssen:
Auch sollte man die Profis nach ihrer Implementierung berücksichtigen:
Einfache Hinzufügung von Bedingungen mithilfe von Argumenten und benutzerdefinierter Reihenfolge nach der Implementierung
Verwenden Sie viele benutzerdefinierte Filter und entfernen Sie alle Aktionen, die erstellt werden müssen. Beispiel: Ein Benutzer kann ID, Name usw. als Argumente haben und die Filterung durchführen. Zusätzlich können die Filter auch auf die Gruppen in den Benutzern angewendet werden.
quelle
Ich denke, dass Grafik im Moment Teil der Backend-Architektur sein muss, für das Hochladen von Dateien haben Sie immer noch eine reguläre API
quelle