2016-04-21 13 views
5

Eksperymentuję z GraphQL i potrzebuję pomocy w zrozumieniu, jaką wartość korzeni można uzyskać, gdy mutacja ma zostać wykonana.Jak zdecydować, jakiej wartości root użyć do mutacji GraphQL?

Konkretny przykład: chcesz zaktualizować nazwę użytkownika aktualnie zalogowanego użytkownika. Mutacja wygląda następująco:

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

Głównym obiektem, który należy podać, jest bieżący użytkownik. Ale skąd to wiesz, kiedy otrzymujesz mutację, nie analizując jej i nie widząc jej nazwy? Żadna decyzja nie jest możliwa na podstawie adresu URL, ponieważ istnieje tylko jeden punkt końcowy. Przetwarzanie łańcucha tylko po to, by wysłać go dalej tam, gdzie będzie ono przetwarzane, brzmi w najlepszym razie nieekonomicznie.

Czy zamiast tego można podać dodatkowe parametry w adresie URL lub treści żądania, aby nadać aplikacji więcej kontekstu?

Odpowiedz

5

Nie jest powszechne dodawanie więcej danych w adresie URL, ale ponieważ każda mutacja jest wspierana przez funkcję, nie trzeba analizować jej nazwy, można ją po prostu zdefiniować w funkcji.

Ponieważ mutacje są zawsze na najwyższym poziomie, ich obiekt główny zawsze będzie głównym obiektem głównym. Jeśli potrzebujesz dostępu do innego obiektu, musisz upewnić się, że podałeś wystarczającą ilość informacji, aby je odzyskać. Aby zachować bieżący użytkownik, sprawdź context, jeden z początkowych argumentów do uruchomienia GraphQL. zapytanie i dostarczone w każdej funkcji rozdzielczości. Kontekst jest bardzo często używany do śledzenia zalogowanego użytkownika.

Teraz, gdy masz obie funkcje, które definiują "changeMyUsername", masz zalogowanego użytkownika i masz podane argumenty z nową nazwą użytkownika, powinieneś mieć wszystko, czego potrzebujesz, aby zaimplementować treść tej funkcji.

Powiązane problemy