Typisiertes GraphQL

Fóir generiert aus Ihren Modellen ein GraphQL-Schema, mit typisierten Queries, Mutationen und Inputs für jedes Modell. Eine CLI-Prüfung meldet Ihrem Build, wenn die eingecheckten Typen nicht mehr zum Projekt passen.

Was jedes Modell erzeugt

Jedes Modell, das Datensätze hält, erzeugt eine Query für den Einzelfall, eine Query für die Mehrzahl, die eine cursor-paginierte Connection zurückgibt, Mutationen zum Erstellen, Aktualisieren und Löschen sowie typisierte Filter-, Sortier- und Update-Inputs. Modelle mit aktivierter Veröffentlichung erhalten zusätzlich Mutationen zum Veröffentlichen und Depublizieren. Ihre Felder liegen auf der obersten Ebene des Datensatztyps, neben Systemfeldern, die mit einem Unterstrich beginnen.

Wenn sich das Produktionsschema ändert

Das Schema wird in zwei Kanälen ausgeliefert, Entwurf und veröffentlicht. Das Bearbeiten eines Modells ändert den Entwurf, und Produktionsschlüssel behalten das veröffentlichte Schema, bis ein Release die Änderung mitnimmt. Ein ganz neues Modell oder eine neue Operation wird bei der Erstellung veröffentlicht, ebenso eine Modelländerung, die nur optionale Felder hinzufügt. Nach einem Release ändert sich das öffentliche Schema für jeden Konsumenten innerhalb von Sekunden.

Die Prüfung zur Build-Zeit

foir types generiert TypeScript-Typen und die Selektionen des typisierten Clients aus dem Projekt. Mit --check schreibt es nichts und beendet sich mit einem Wert ungleich null, wenn die eingecheckte Datei von einer frischen Generierung abweicht. In der CI ausgeführt, lässt das den Build fehlschlagen, wenn sich das Projekt geändert hat und Ihre eingecheckten Typen nicht. Die Typen entstehen pro API-Schlüssel, sodass eine Operation, die der Schlüssel nicht ausführen kann, fehlt und ihr Aufruf ein Kompilierfehler ist.

Die Prüfung zur Laufzeit

Der generierte Client warnt einmal pro Client-Instanz, wenn sich das Schema des Servers seit der Generierung verändert hat. Er wirft FoirSchemaDriftError bei einem typisierten Aufruf, der von etwas abhängt, das nicht mehr ausgeliefert wird, etwa einem entfernten Feld oder Argument.

Wo die Typisierung endet

In den generierten Typen ist die Sortierung ein geschlossener, geprüfter Typ. Filter sind als unknown typisiert, ebenso die Argumente und Ergebnisse von Namespace-Operationen. Handgeschriebenes GraphQL lässt sich mit graphql-codegen gegen das Schema typisieren, als Build-Schritt in Ihrer Hand.

Details nachlesen

Der GraphQL-Leitfaden listet die Queries, Mutationen und Inputs auf, die für ein Modell generiert werden, und wo sich das Schema erkunden lässt.