Antworten:
Nachteile:
Dies wird jedoch mehr als konterkariert:
graphql-spring-boot-starter
und graphql-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.
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
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.
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.
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