Projektowanie Serwera
2 godz. 7 min · Full-stack i Programowanie
Przemysław NowakSoftware EngineerJeżeli kiedykolwiek używałeś GraphQL aby pobrać dane na Front-endzie to z pewnością wiesz, że aby to zrobić musisz znać połączenie Grafów oraz wiedzieć jak stworzyć odpowiednie zapytanie. W kursie tym nauczysz się jak takie grafy projektować od strony serwera i dostarczać je dla FrontEnd Developerów.
Dowiesz się jakie jest połączenie pomiędzy schematem serwera a resolverami. Schemat (schema) to nic innego jak opis aplikacji GraphQL z podziałem na typy i relacje - właśnie w taki sposób tworzą się grafy - natomiast resolvery są odpowiednikami w kodzie - wykonującymi się za każdym razem kiedy ktoś wysyła odpowiednie zapytanie. Dokładnie wytłumaczę Ci korelację pomiędzy tymi dwiema rzeczami oraz na konkretnych przykładach zrozumiesz jak je implementować.
Statystyki są nieubłagane - coraz więcej firm inwestuje w GraphQL ze względu na rewolucyjne podejście do pobierania danych oraz jego prostotę. Dlatego jeżeli spojrzymy na rynek pracy to możemy zobaczyć, że GraphQL staję się pewnego rodzaju "must have", którego z pewnością warto się nauczyć.
Przekonasz się, że tworzenie backendu z GraphQL jest niesamowicie szybkie. Kiedy zrozumiesz podstawowe połączenia schematu i resolverów nic Cie nie powstrzyma od błyskawicznego pisania kodu. Jeżeli chcesz stworzyć MVP, czy zaimplementować elastyczny mikro serwis to GraphQL może okazać się strzałem w dziesiątke dlatego, że możesz stworzyć aplikację z prędkością światła, a co więcej, każda rozbudowa jest bardzo prosta ze względu na brak zależności w kodzie.
Tego wszystkiego nauczysz się w tym kursie, odczyt i zapis danych wydają się rzeczą normalną, natomiast dla mnie najciekawszą rzeczą są subskrypcje dzięki, którym możesz tworzyć aplikacje działające w czasie rzeczywistym. Zobaczysz, że z GraphQL wcale to nie jest skomplikowane, a wręcz banalnie proste!
Kurs ten jest skierowany do osób, które mają podstawową wiedzę nt. GraphQLa oraz znają podstawy JavaScript - ponieważ za pomocą NodeJS zaimplementujemy serwer GraphQL. Jeśli jeszcze tego nie zrobiłeś/aś - polecamy przed przystąpieniem do tego kursu przerobienie materiałów JavaScript od Podstaw, kursu podstawowego GraphQL, a mile widziana jest także znajomość zagadnień z kursów Node.js.
Dziś zajmiemy się subskrypcją,
czyli pokażę Ci jak stworzyć Realtime App i jak subskrybować się na jakiś zbiór
danych i dostawać w czasie rzeczywistym informację, że coś się zmieniło.
Generalnie będziemy korzystać z biblioteki
grafu subskrypcji, która już jest zawarta w grafiku Elliot, a to jest to, o czym Ci
mówiłem, więc możemy się po prostu do tego podpiąć.
Grafiku subskrypcji pozwala nam na stworzenie suba, czyli
kanału, na którym będziemy wysyłać dane i je odbierać.
Natomiast na początku chciałbym Ci
powiedzieć czym to się różni jeżeli chodzi o mutację i o query.
Tak naprawdę nie ma tu wiele różnic.
Jeżeli chodzi o SQL to opiszemy to w ten sam sposób co mutacje i query.
Natomiast jeżeli chodzi o Revolver piszemy
to w bardzo podobny sposób, czyli piszemy subskrypcję.
Tutaj piszemy naszą subskrypcję, tyle tylko, że tutaj nie zwracamy funkcji
tak jak to robiliśmy wcześniej, tylko obiekt z metodą subscribe
i ta metoda subscribe będzie musiała zwrócić mieć przypisaną funkcję,
która będzie zwracała iterator i ten async iterator będzie wysyłał jakieś
dane na zasubskrybować się do odpowiedniego klucza.
Czyli jeżeli stworzymy subskrypcję z
kluczem Saving change topik, to również później publikując dane musimy na ten
klucz publikować dane i tutaj będzie nasz pilot.
Być może na razie nie jest to dla Ciebie
jasne, natomiast za chwilkę mam nadzieję, że wszystko Ci się rozjaśni.
Jak dodamy w kodzie subskrypcję jaką
chcemy stworzyć to subskrypcja na dodanie komentarza.
Czyli jeżeli ktoś doda jakiś nowy
komentarz, będziemy chcieli natychmiast o tym wiedzieć.
Możesz sobie wyobrazić, że to jest taki czas, kiedy jesteś np.
na stronie książki,
ktoś dodaje komentarze i chciałbyś, żeby od razu Ci te komentarze odświeżają, a nie
żebyś musiał odświeżyć stronę, żeby zobaczyć jakieś nowe wpisy.
No więc jesteśmy teraz wszystkimi i dodajmy tutaj nowy typ.
I teraz będziemy chcieli dodać subskrypcję
On Comment Red i ta subskrypcja będzie nam zwracała po prostu komentarz.
Także w porządku.
Tak by mogła ta subskrypcja wyglądać.
Jak widzisz, to się niczym nie różni
i będziemy dokładnie to samo robić co mamy w dokumentacji, czyli na dla naszego.
Zawiera on komentarze Tutaj dodamy
subskrypcję On Comment subscribe i będziemy tutaj odpowiedni klucz wysyłać.
Natomiast zanim to zrobimy musimy mieć tego skonfigurowanego.
A więc importujemy sobie.
W naszym pliku index jest.
Zróbmy tutaj import Passat i tak tutaj
mówi nam, żebyśmy z tego modułu zaimportować tego Passata.
Natomiast tak naprawdę możemy to zrobić i zaimportować z jogi,
ponieważ tak jak mówiłem, joga zawiera w sobie cały moduł grafiku.
I teraz zejdźmy troszeczkę na dół
i tuż przed inicjalizacja naszego serwera stwórzmy nową instancję.
A więc mamy tutaj nową instancję.
I to jest cały kanał, przez który będziemy się komunikować.
Więc to jest trochę jak baza danych.
Będziemy chcieli mieć jeden kanał, więc również możemy go dodać do kontekstu.
I teraz, kiedy będziemy wykonywać naszą subskrypcję jakąś część, np.
będziemy publikować dane, to możemy sobie wyciągnąć z kontekstu i go użyć.
Więc fajnie mamy to już skonfigurowane,
mamy dostępnego, więc mamy na czym działać.
Wcześniej stworzyliśmy sobie już typ
subskrypcji ON komentarze i musimy teraz jedynie tutaj dodać
nasz nowy recorder i to niech będzie z subskrypcji Recorder.
James Chris Alvarez.
Dobra, zróbmy eksport.
Przy tej wersji.
Komend AT.
Tak jak pokazywałem Ci w dokumentacji
tutaj mamy obiekt, ale ten obiekt zwraca funkcję subscribe.
I ta funkcja będzie nam zwracała async iterator.
Czyli tutaj. Żeby zwrócić ten iterator, musimy mieć
dostęp do Papie a, ponieważ ma w sobie iterator.
No i oczywiście te metody w tym miejscu są
takie same jak dla innych typów, czyli dla mutacji i query.
Tutaj byłyby argumenty, tam na początku byłby parent, a tutaj może być baza danych
lub może być właśnie, którego przed chwilą dodaliśmy.
Super.
I teraz zróbmy tutaj sobie absynt.
Iterator i tutaj musimy podać klucza
klucz, pod którym będziemy się subskrybować.
Tutaj wewnętrznie w tym kanale, czyli my możemy powiedzieć, że to będzie komend AT.
I to jest ważne, żeby zidentyfikować ten klucz, ponieważ jeżeli ktoś się tutaj za
subskrybuje wykona tę metodę, to za subskrybuję się do tego identyfikatora.
I my teraz publikując nasze akcje również musimy publikować je na ten identyfikator.
W porządku, więc mamy subskrypcję gotową i możemy przejść do.
Dodajemy tutaj nowy typ subskrypcji.
I mamy moment reset i możemy na przykład zobaczyć kontent nowego komentarza.
OK.
Owszem, film ma stricte na fabule.
Zobaczmy co się dzieje, przejdźmy do skupienia.
Tutaj tak naprawdę zwracamy na iterator natomiast tego, co mi się wydaje, po
prostu nie dodaliśmy tego rewolweru do definicji naszych rewolwerów.
I właśnie przy okazji od razu
możesz zobaczyć, że czy query Station czy subskrypcji to nie ma znaczenia.
My po prostu możemy w taki sposób to sobie tutaj podpiąć.
Czyli jest to ta sama analogia.
No i musimy jeszcze sobie zaimportować ten pliczek tutaj, czyli subskrypcje,
subskrypcje, Elizabeth from Source i Servers.
Skrypt.
Ale nie rób.
Tylko po prostu z subskrypcji Razor Wars.
Dobra, zobaczmy czy działa OK. Działa.
Więc wróćmy do programu. No i ok.
I teraz widzisz, że że nasłuchuje aż coś wyśle jakieś dane.
Natomiast tak naprawdę na razie nie ma co wysyłać tych danych, ponieważ nigdzie nie
zaimplementowali Publisher, więc musimy gdzieś jakiegoś Publisher
sobie uruchomić, więc może na razie nie nasłuchuje na te dane.
Wróćmy do kodu.
Albo może jeszcze wróćmy do dokumentacji.
I tutaj w tej dokumentacji mamy
informację, że musimy wykonać publish nasz klucz oraz bailout Bailout.
To będzie dokładnie ten komentarz, który właśnie dodaliśmy.
Czyli zróbmy sobie Papa publish,
czyli wejdźmy do uda i będziemy chcieli to publikować w
momencie jak się jakiś komentarz pojawi, czyli na tej metodzie.
I tutaj możemy oczywiście pobrać sobie
teraz jak pamiętasz i możemy tę metodę po prostu w apce Publish.
Wykonać.
Możemy to zrobić przed dodaniem do bazy
danych, żebyśmy mieli pewność, że już jest coś w bazie danych, kiedy to publikujemy.
Dobra, i teraz musimy tutaj podać klucz.
Czyli to będzie comment Adept.
I pilot i pilot będzie komend AT.
I to będzie ten nasz nowy.
Komentarz, czyli new.
Dobra, tak to wygląda.
Możemy to zapisać.
Wróćmy do Play.
No więc dodajmy tutaj sobie mutację.
Ad koment.
OK.
I tutaj jak pamiętasz musimy podać komend input.
Będziemy tutaj potrzebować booka id.
Może po prostu wejdziemy do bazy danych i sobie jakieś book ID.
Weźmy.
Musimy podać kontent.
OK.
I musimy podpowiedzieć jakie pola chcemy dostać.
Niech to będzie po prostu ID.
Dobra, i teraz zanim wykonam tą mutację
przejdźmy tutaj do tej subskrypcji i po prostu zacznijmy nasłuchiwać.
Teraz poszukujemy, więc wykonajmy tutaj tą mutację.
Komentarz nam się dodał a ID Zobaczmy co my tutaj dostaliśmy.
Dostaliśmy on komenda NULL.
Zobaczmy dlaczego.
Przejdźmy do.
Zróbmy tutaj on komendę, ale w zasadzie ponieważ to pole, które stworzyliśmy w
Scheme, czyli tutaj w naszym indeksie to jest on komenda det, a nie komenda.
Więc musimy wypełnić ten bailout z tym polem.
Dobra, ok, teraz jeszcze raz się za subskrybuje.
I dodajmy dwa.
Na tej dodał się komentarz.
Zobaczmy, co mamy tutaj.
OK.
No i mamy teraz 4 sekundy temu dostaliśmy Echelon 2, czyli
nasze nasłuchiwanie działa, dostajemy komentarze.
Natomiast to jest dalej nie ten case, który chcieliśmy, ponieważ chcielibyśmy
nasłuchiwać tylko i wyłącznie na komentarze dla danej książki.
Czyli jeżeli jesteśmy na jakiejś stronie
książki, to chcemy dostawać tylko te komentarze, a niekoniecznie wszystkie.
A teraz byśmy dostawali wszystkie.
Więc w następnej lekcji pokażę Ci jak takie komentarze przefiltrować i jak
subskrybować tylko i wyłącznie do komentarzy dla konkretnej książki.