Poprzednie dwa posty omówiły podstawy zastosowania GraphQL zarówno na stronie serwera jak i klienta. Możliwości Apollo Client wykraczają jednak daleko poza wysyłanie zapytań na serwer.
Czym więc zajmiemy się w tym wpisie?
Cache’owaniem danych przez Apollo Client
Dwukierunkową komunikacją pomiędzy serwerem a klientem
Debugowaniem za pomocą Apollo Developer Tools
Zmęczenie wadami podejścia REST oraz rosnąca popularność GraphQL powodują, że warto przeczytać ten post i zgłębić wiedzę na temat Apollo Client.
Oznaczało to, że po każdym wywołaniu funkcji createOwner, które tworzyło na serwerze nowy obiekt owner, cała lista była pobierana ponownie. Nie są to jednak jedyne możliwości aktualizowania cache
Cykliczne powtarzanie zapytania do serwera
Jeżeli zrezygnujemy z użycia funkcji refetch i zastąpimy ją ustawieniem pollInterval na wysyłanym na serwer query:
Zauważymy, że co 30 sekund na serwer wysyłane będzie żądanie zwracające obiekty owners. Jeżeli w międzyczasie dodamy jakiś obiekt, nie doda się on do listy od razu – a dopiero po tym, jak zapytanie pobierające listę elementów załaduje nowe dane.
Ręczna aktualizacja cache
Ponieważ w pierwszym poście zdefiniowaliśmy, że żądanie utworzenia obiektu Owner na serwerze zwraca nowo utworzony obiekt:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Mutation: {
createOwner: (parent, args, context, info) =>{
let owner = {...args.owner, id: owners.length + 1};
Przekazujemy w opcjach fukcję update do naszej mutacji. Wewnątrz mamy dostęp do stanu, skąd za pomocą metody readQuery pobieramy aktualne dane. Później za pomocą metody writeQuery wpisujemy dane zaktualizowane o obiekt utworzony na serwerze.
Dwukierunkowa komunikacja z serwerem za pomocą Subscription i WebSocket
Ponieważ w poście dotyczącym części serwerowej zajmowaliśmy się tylko obsługą żądań HTTP, konieczne będą zmiany nie tylko na kliencie, ale również na serwerze.
Obsługa Subscriptions i WebSocket na serwerze
Aby umożliwić publikowanie i subskrybowanie należy zaimportować klasę PubSub i utworzyć jej instancję:
Zainstalujmy bibliotekę która obsłuży komunikację WebSocket, wymaganą przez Apollo Client:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm install subscriptions-transport-ws
npm install subscriptions-transport-ws
npm install subscriptions-transport-ws
Następnie, aby móc używać równocześnie komunikacji WebSocket i HTTP, konieczne będzie decydowanie którego adresu należy użyć do realizacji Query które otrzyma instancja klienta Apollo Client:
W zakładce GraphQL mamy możliwość wysyłania zapytań na serwer, co ważne – po kliknięciu przycisku Explorer możemy wyklikać sobie co serwer ma nam zwrócić:
Zakładka Queries
W zakładce Queries znajduje się historia wszystkich zapytań wysłanych na serwer które pobrały dane. Mamy możliwość bezpośredniego uruchomienia tych zapytań dzięki przyciskowi „Run in GraphQL”:
Zakładka Mutations
W zakładce Mutations znajdują się wszystkie zapytania modyfikujące dane na serwerze:
Zakładka Cache
W zakłace Cache znajdziemy zapisane dane z wysłanych już zapytań:
Podsumowanie
Apollo pozwala nam w prosty obsłużyć zaawansowane przypadki wymagające użycia dwukierunkowej komunikacji między serwerem a klientem czy też obsługę cache. Udostępnia też narzędzia mocno wspomagające debugowanie. Platforma ta będzie doskonałym wyborem implementacji GraphQL w projekcie.