Durch die GraphQL-Dokumentation nach benutzerdefinierten Skalartypen (ich versuche, meinen eigenen Datumstyp zu erstellen) bin ich nicht sicher, was der Unterschied zwischen parseValue und parseLiteral ist.
Die Dokumentation scheint keine Beschreibungen zu enthalten, was die Funktionen tun sollen.
Kann mir jemand sagen, was die Anforderungen sind? Ich nehme an, dass serialize
den Skalar zu einer Zeichenfolge serialisieren muss. Ist das korrekt? Ich nehme an, dass parseLiteral eine Deserialisierung dieser Zeichenfolge zum Typ ist? In meinem Fall ein Datumstyp. In den Beispielen - serialize und parseValue sind jedoch dieselbe Funktion - was darauf hindeutet, dass es sich nicht um eine einfache Deserialisierungsmethode handelt.
Die Methode serialize
wird aufgerufen, wenn der Wert des Typs als Antwort an den Client gesendet wird. Da die Werte in der Ausgabe die Form von JSON haben, kann der Rückgabewert von serialize
beliebig sein. Könnte String, Nummer, Array, Objekt sein ...
Die anderen beiden Methoden ( parseValue
und parseLiteral
) sollen Eingaben lesen.
In GraphQL gibt es zwei Möglichkeiten, die Eingabe vom Client zu lesen, eine in der Abfrage, wie:
%Vor% Dabei ist 10
der Inline-Wert für first
argument. Da die Eingabesprache für GraphQL nicht genau JSON ist, wird der Wert (hier 10
) analysiert und in AST (Abstract Source Tree) konvertiert. In diesem Fall kommt parseLiteral
zum Spielen. Es gibt den AST ein und gibt den geparsten Wert des Typs zurück. Typen können so komplex sein wie JSON und parseLiteral
könnte den AST durchlaufen und JSON zurückgeben.
Die andere Möglichkeit, Eingaben von Clients zu lesen, ist über Variablen:
%Vor%Variablen:
%Vor% Da die Variablen reines JSON sind, brauchen Sie hier keine AST, Sie haben bereits JSON. Hier kommt parseValue
zum Einsatz. Es erhält die Eingabe als JSON und gibt zurück, was auch immer der Abfrage-Resolver verwenden sollte.
Sie könnten also eine andere Darstellung haben, wenn Sie von Variablen lesen, als wenn Sie Werte inline lesen, aber konzeptionell sollten sie hinsichtlich der Darstellung gleich sein. Da der "Typ" der Eingabe jedoch unterschiedlich ist (Inline ist GraphQL und Variable ist JSON), könnte der Parsing-Algorithmus anders sein. Wenn Sie es als Eingabetyp definieren, müssen Sie daher zwei separate Methoden zum Lesen bereitstellen.
Tags und Links graphql graphql-js