Alle Artikel über GraphQL werden Ihnen sagen, wie wunderbar es ist, aber gibt es irgendwelche Nachteile oder Mängel? Vielen Dank.
Nachteile:
Diesen wird jedoch mehr als entgegengewirkt:
Ich habe einige wichtige Bedenken für alle, die GraphQL in Betracht ziehen gefunden, 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, werden Sie muss etwas paginieren.
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 dies tun Fügen Sie eine Transformationsebene hinzu, um die Antwort neu zu gestalten.
Cache auf Netzwerkebene : Aufgrund der üblichen Verwendung von GraphQL über HTTP (A POST auf einem einzelnen Endpunkt) Der Cache auf Netzwerkebene wird schwierig. Eine Möglichkeit zur Lösung besteht in der Verwendung von persistierten Abfragen.
Umgang mit dem Hochladen von Dateien : Die GraphQL-Spezifikation enthält keine Informationen zum Hochladen von Dateien, und Mutationen akzeptieren keine Dateien in den Argumenten. Um dieses Problem zu beheben, können Sie Dateien mithilfe anderer APIs (z. B. REST) hochladen und die URL der hochgeladenen Datei an die GraphQL-Mutation übergeben oder die Datei im Ausführungskontext einfügen, sodass die Datei in den Resolver-Funktionen enthalten ist.
Unvorhersehbare Ausführung : Die Art von GraphQL ist, dass Sie das Kombinieren beliebiger Felder abfragen können. Diese Flexibilität ist jedoch nicht kostenlos. Es gibt einige Bedenken, die gut zu wissen sind, z. B. Leistung und N + 1-Abfragen.
Super Simple APIs : Falls Sie einen Dienst haben, der eine wirklich einfache API verfügbar macht, wird GraphQL nur eine zusätzliche Komplexität hinzufügen, so dass ein einfaches REST API kann besser sein.
Das größte Problem, das ich mit graphQL sehe, wenn Sie mit relationalen Datenbanken arbeiten, ist mit Joins.
Die Tatsache, dass Sie einige Felder zulassen/nicht zulassen können, macht Joins nicht trivial (nicht einfach). Was zu zusätzlichen Fragen führt.
Auch verschachtelte Abfragen in graphql führen zu zirkulären Abfragen und können Absturz des Servers. Besondere Vorsicht ist geboten.
Ratenbegrenzung von Anrufen wird schwierig, da der Benutzer jetzt mehrere Abfragen in einem Anruf auslösen kann.
TIP : Verwenden Sie den Datenlader von Facebook, um die Anzahl der Abfragen bei Javascript/Node zu reduzieren
Es wird von Jahr zu Jahr besser und die Community von GraphQL wächst derzeit. Infolgedessen gibt es viel mehr Lösungen für viele Probleme, die bereits in anderen Antworten erwähnt wurden. Aber um zuzugeben, was Unternehmen noch davon abhält, alle Ressourcen auf GraphQL zu übertragen, möchte ich einige Probleme und Lösungen auflisten, denen ungelöste folgen.
Es gibt jedoch noch einige weitere Fälle, die als Nachteile angesehen werden können:
Zusammenfassend lässt sich sagen, dass GraphQL nur ein Tool für bestimmte Ziele ist und mit Sicherheit kein Wundermittel 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 zu beachten sind:
Auch sollte man die Profis nach ihrer Umsetzung berücksichtigen:
Einfach zu implementierende Bedingungen durch Argumente und benutzerdefinierte Reihenfolge
Verwenden Sie viele benutzerdefinierte Filter und entfernen Sie alle Aktionen, die erstellt werden müssen. Ein Benutzer kann beispielsweise ID, Name usw. als Argumente verwenden und die Filterung durchführen. Zusätzlich können die Filter auch auf die Gruppen in den Benutzern angewendet werden.
Ich denke, dass graphql im Moment Teil der Backend-Architektur sein muss