2016-04-21 3 views
5

Ich experimentiere mit GraphQL und benötige Hilfe, um zu verstehen, wie man den Wert einer Wurzel erkennt, wenn eine Mutation ausgeführt wird.Wie entscheidet man, welcher Wurzelwert für GraphQL-Mutationen verwendet wird?

Konkretes Beispiel: Sie möchten den Benutzernamen des aktuell angemeldeten Benutzers aktualisieren. Die Mutation sieht so aus:

mutation TestMutation { 
     updateMyUsername(newName: "CoolName") { 
         username } 
} 

Das Stammobjekt, das hier bereitgestellt werden soll, ist der aktuelle Benutzer. Aber woher weißt du das, wenn du die Mutation bekommst, ohne sie zu analysieren und ihren Namen zu sehen? Basierend auf der URL ist keine Entscheidung möglich, da nur ein Endpunkt existiert. Und die Zeichenfolge zu parsen, nur um sie weiter zu senden, wo sie erneut analysiert wird, klingt bestenfalls verschwenderisch.

Ist es vielleicht allgemeine Praxis, stattdessen einige zusätzliche Parameter in der URL oder dem Anfragetext anzugeben, um der Anwendung mehr Kontext zu geben?

Antwort

5

Es ist nicht üblich, mehr Daten in die URL aufzunehmen, aber da jede Mutation durch eine Funktion unterstützt wird, müssen Sie ihren Namen nicht analysieren, Sie können dies einfach in der Funktion definieren.

Da Mutationen immer die oberste Ebene sind, ist ihr Wurzelobjekt immer das Stammobjekt der obersten Ebene. Wenn Sie Zugriff auf ein anderes Objekt benötigen, müssen Sie sicherstellen, dass Sie genügend Informationen zum Abrufen bereitgestellt haben

Um den aktuell angemeldeten Benutzer zu verfolgen, überprüfen Sie context, eines der ersten Argumente für eine GraphQL Abfrage und in jeder Auflösungsfunktion zur Verfügung gestellt. Kontext wird sehr oft verwendet, um den angemeldeten Benutzer zu verfolgen.

Jetzt, da Sie eine Funktion haben, die "changeMyUsername" definiert, haben Sie den angemeldeten Benutzer und Sie haben die bereitgestellten Argumente mit dem neuen Benutzernamen, Sie sollten alles haben, um den Rumpf dieser Funktion zu implementieren.