Lass uns die Probleme von GraphQL näher erläutern. Der Kernvorteil von GraphQL liegt nicht im sogenannten Typsystem; tatsächlich können starke Typbeschränkungen auch im RESTful-System gut umgesetzt werden. Die ORPC-Lösung von Zod, die plattformübergreifenden Code generiert, sowie die FastAPI + Pydantic-Lösung im Python-Ökosystem können ähnliche Ergebnisse erzielen. Der größte Vorteil von GraphQL besteht darin, dass die Daten flexibel angefordert werden können, je nach den Bedürfnissen des Clients. Dies ist auch eine der Hauptfunktionen, die in traditionellen BFF-Schichten implementiert werden. Der Unterschied zu traditionellen BFF-Schichten besteht jedoch darin, dass die Implementierung von GraphQL normalerweise stark an das Geschäft gebunden ist und keine separate Infrastruktur zur Behandlung ähnlicher Probleme herausgelöst wurde. In dieser Situation wird die Flexibilität viele Probleme mit sich bringen, die im GraphQL-System (oder in ähnlichen BFF-Lösungen, die in das Geschäft integriert sind) auftreten werden. Am einfachsten ist, dass Flexibilität eine größere Angriffsfläche mit sich bringt. Ein böswilliger Benutzer kann komplexe Abfragen konstruieren, um durch einfache AST-Analyse erhebliche Ressourcen deines Servers zu verbrauchen. Natürlich werden viele Leute sagen, ach, du kannst die Komplexität der Abfragen einfach einschränken, oder? Aber ich frage dich, erfordert die Berechnung der Komplexität einer Abfrage nicht auch die Analyse des AST? Und andere werden vielleicht sagen, naja, du kannst das Muster der Abfragen einschränken, oder? Aber ich frage dich, muss dein Muster nicht auch den AST analysieren? Und du beschränkst den größten Vorteil von GraphQL, was unterscheidet dich dann noch von einer traditionellen RESTful API? Außerdem, wenn die AST-Analyse von GraphQL nicht vom Geschäft getrennt wird, wird dein Event-Loop bei Node, einem Single-Thread-Modell, direkt überlastet, was die Benutzererfahrung erheblich verschlechtert. Viele Dinge, die GraphQL tun muss, erfordern eine separate Infrastruktur, um sich vom Geschäft zu lösen, wie z.B. Ratenbegrenzung auf Abfrageebene, spezielle Authentifizierungslogik usw. Ehrlich gesagt, für Datenplattformen oder interne Dienste könnte GraphQL eine recht gute Wahl sein. Aber für skalierte B2C-Geschäfte bringt GraphQL mehr Komplexität und Unsicherheit mit sich als traditionelle RESTful APIs und erfordert erheblich mehr Entwicklungsaufwand für die Infrastruktur.