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.
Chciałbym, abyś to Ty zaimplementował
rewolwer do pobierania pojedynczej książki oraz do pobierania pojedynczego autora,
a dodatkowo do pobierania w całej listy komentarzy.
Na końcu chciałbym, abyś zrelacjonował
komentarze do książki, czyli podczas pobierania książki mógł również pobrać
dane komentarze, które są przypisane do niej.
Wygląda to mniej więcej tak, że mamy tutaj już gotową autora.
Musisz jedynie zaimplementować do niej rewolwer.
Podobnie będzie z Debug.
Również będziesz tutaj musiał podać ID,
żeby znaleźć książkę po ID i dodatkowo będziesz potrzebował stworzyć
metodę komend i stworzyć nowy typ dla komentarzy.
Komentarze również są w bazie danych, więc jeżeli to podgląd to tutaj te komentarze
się znajdują dokładnie tutaj, więc po prostu chodzi o to, żeby się tam
zwrócił w swoim resolve i końcową rzeczą, którą powinieneś zrobić to
powinien zrelacjonować te komentarze z książkami.
Czyli powinieneś dodać do pola book nowe
pole komend i dodać tutaj relację tak jak to jest autorami do komentarzy.
Natomiast różnicą jest to, że tak naprawdę nie mamy tych komentarzy w książkach, więc
w komentarzach mamy pole Bóg ID, więc za pomocą tego pola musisz znaleźć
daną książkę i ten komentarz zwrócić w tej książce.
Czyli jeżeli będziesz miał książkę o danym
ID, musisz przeszukać komentarze czy dany komentarz posiada właśnie takie ID w polu
book id i ten komentarz zwróci do danej książki.
Więc jeżeli chciałbyś to teraz zrobić
samodzielnie proszę video, a ja za chwilkę do Ciebie wrócę z rozwiązaniem.
Mam nadzieję, że udało Ci się wykonać zadania.
Podejrzewam, że mogłeś mieć problem jedynie ze relacje komentarzy z książkami,
Natomiast za chwilę pokażę Ci, że jest to bardzo proste, więc zacznijmy to robić.
Po prostu stwórzmy tutaj Get books.
Czyli rozpisz schemat i pobierz tutaj również książkę Po IT i zwrócimy ebook.
Zaczniemy od tego za chwilę, zanim komentujemy również autor.
Tutaj mamy literówkę ebook i w tym miejscu dodamy metodę Get Bug.
Oczywiście musimy tutaj dodać przecinek.
I będzie ona jako argument przyjmowała ID.
I będziemy potrzebować dostęp do bazy danych.
Teraz po prostu zwrócimy nasze
książki, a w zasadzie w książkach wykonamy metodę Find, która pozwoli nam znaleźć tą
książkę, potem ID, które dostaliśmy w argumentach, czyli dostaniemy Book i.
Jeżeli Bóg ID jest takie samo jak ID,
które dostaliśmy w tym miejscu to zwrócimy tą daną książkę.
Więc pierwsza część zadania zrobiona.
Zobaczmy czy to działa.
Więc stwórzmy nową zakładkę.
I tutaj zrobimy sobie debug.
Jako argument podamy oczywiście ID.
I może po prostu z tych książek, które tutaj mamy pobrane wybierzmy jedno ID.
Albo po prostu sobie z bazy danych to skopiować.
Wklejamy, więc teraz powinniśmy pobrać.
Musimy oczywiście jeszcze wybrać pola.
Niech to będzie.
I wykonajmy.
I jak widzisz ta metoda działa.
Więc mamy to gotowe.
Przejdźmy do kolejnej części zadania, czyli za implementujemy Get Authors,
a w zasadzie katalog, który musimy tutaj stworzyć.
W zasadzie nie musimy, ale dobrze by było,
gdybyśmy stworzyli sobie nowy plik i nazwali go autor Prince Albert.
Ponieważ autor to jest osobna domena i możesz sobie wyobrazić, że to jest osobny
graf, to dobrze by było go trzymać w osobnych plikach.
I zrobimy podobnie jak tutaj, czyli
stworzymy sobie root author christopher i dodamy tam metodę get Autor.
Tutaj jeszcze zmieńmy nazwę na root autor Resolve i metoda get autor.
I to jest dokładnie tak, jak robiliśmy z książką, czyli podajemy ID.
Potrzebujemy dostępu do bazy danych.
Jedynie tutaj arrow action.
I zwracamy sobie D.B..
Autor.
Autor.
I zwracamy tego autora, którego ID równa się naszemu ID z Properties.
Teraz ten rewolwer musimy oczywiście zapiąć w indeksie, tak jak robiliśmy to z
Book Revolver, czyli robimy to analogicznie.
I tutaj pobieramy Resolve.
Autor, czyli solver autora, który jest Albert.
Dobra, tak, teraz go tutaj dodać musimy.
Oczywiście jeżeli dodajesz go bezpośrednio
w Query, nie ma z tym najmniejszego problemu.
Ważne, że zrozumiesz tą relację.
Natomiast dzielenie takiego kodu
owocuje tym, że jest to później łatwiejsze w utrzymaniu.
Dobrze i teraz możemy zobaczyć czy ten
autor nam działa poprawnie, więc wejdźmy do programu, dodajmy nową zakładkę.
Zrób ankietę. Autor.
Również musimy podać ID.
Więc może mamy tu jakiegoś autora?
Pobierz jakiegoś autora SID.
I niech to będzie Calvin Klein.
Jego teraz tutaj powierzamy.
Chcemy wybrać First name i może tylko first i ok.
I mamy już kolejną metodę zrobioną.
Jak widzisz było to bardzo proste.
Kolejnym etapem zadania było stworzenie,
który zawiera dla komentarzy, A więc będziemy chcieli
pobrać wszystkie komentarze z bazy danych, podobnie jak robimy to na przykład
z książkami, czyli pobieramy Get Books i jest to tablica książek.
A więc dodajmy to w Scheme Get koment.
To będzie również tablica komentarzy.
Musimy zdefiniować nowy typ komend.
I tak jak mówiłem, tutaj powinniśmy definiować typy na podstawie tego co mamy
w bazie danych lub na podstawie tego co chcemy zwrócić.
Jeżeli chciałbyś te dane w Resolve przetransformować, ja będę chciał po
prostu zwrócić wszystko to co tutaj mamy, czyli dodamy wszystkie te pola po kolei.
A więc tak mamy ID, to jest type.
Kiedy mamy Content id to jest string.
Mamy tutaj jeszcze bukiet i mamy aktorów i to również będzie hit.
I mamy jeszcze proof, który jest bulionem i to nie musi być w zasadzie olaboga!
OK, więc mamy.
Tylko teraz musimy dodać implementację Resolve.
A więc kolejny raz w Resolve stworzymy nowy plik komend, czyli serwer gdzie jest
tak jak robiliśmy to i dla autorów i dla książek.
Pobieramy to konstruktor komend resolve.
I tutaj będziemy robić metodę komend.
I tutaj dostaniemy parents argumenty i to
co nas nas interesuje czyli baza danych i zwrócimy komentarz.
Dobre i to powinno już działać.
Jeszcze na szybko możemy sobie zerknąć czy to działa.
Zróbmy get koment, a w zasadzie nie będzie
działać, bo nie podpisaliśmy jeszcze komend resolve do indeksu, więc zróbmy to
tak jak w przypadku tych dwóch pozostałych.
I to będzie komentarz do wersji dobra i teraz tutaj.
Dobra.
Teraz już powinien działać, więc zrób koment i wybierzmy content.
Jak wszystko działa, nasze komentarze się
pobierają, mamy tylko 2 komentarze dostępne, więc wszystko się zgadza.
I teraz zostało nam zrobić ostatnią rzecz, z którą być może miałeś problemy.
Jeżeli nie to się cieszę.
Czyli pobrać komentarze dla książki.
Niemniej jednak jest to bardzo proste.
Musimy zdefiniować tutaj pole comment i również będziemy zwracać tablicę comment.
Czyli tak jak robiliśmy to w przypadku Get Comments.
Natomiast tutaj będziemy chcieli dodać komentarze tylko dla danej książki.
W zasadzie nie tutaj, bo to autora, a dla typu book ok.
I żeby to zrobić musimy się przefiltrować po tych komentarzach i sprawdzić czy dany
bukiet, czyli pole bukiet równa się temu jakie ma ID nasza książka.
Ponieważ jeżeli zerkniemy na bok Wizard Wars to tutaj dostajemy informacje
odnośnie Parents, czyli dostajemy informację jakie ID ma książka.
Podobnie jest z authors to dostępu autor,
ale jeżeli byśmy pobrali ID to byśmy mieli ID książki.
Więc zróbmy tutaj właśnie taki rezultat na polu books i to będzie comment.
I tutaj sięgamy do Parents i do pola ID, czyli
dokładnie tak jak pokazywałem to w bazie danych.
To jest cały nasz parent i sięgamy do tego pola.
Argumentów żadnych tutaj nie mamy.
I jeszcze potrzebujemy dostępu do bazy danych.
To co będziemy robić, to tak naprawdę
pobierzemy komentarze z bazy danych i będziemy chcieli je przefiltrować metodą
filter, czyli podobnie jak to robiliśmy z autorami.
A więc zróbmy sobie DB Filters.
Gdzieś tutaj mam jeszcze błąd ok.
DB Command Filter i teraz będziemy sprawdzać czy dany komentarz.
I jego pole comment book right równa się temu ID, które ma nasza książka.
I to już tyle.
Te komentarze powinny już się teraz zrelacjonować.
Poprzez to filtrowanie, a więc pobierając komentarze dla książki, pobierzemy
tylko te komentarze, które są przypisane dla danej książki, czyli tak jak mamy to w
bazie danych przypisane za pomocą pola Book.
Zerknijmy czy to działa.
Wróćmy do tego Query get Books.
Przejdźmy do pola Comment.
Wybierzmy tutaj może content.
Wykonajmy to query.
I widzisz, tutaj dostaliśmy komentarz dla tej naszej książki.
Dla drugiej nie mamy żadnych komentarzy, czyli dostajemy pustą tablicę.
Dla trzeciej mamy komentarze i dla
czwartej również nie mamy żadnych komentarzy.
Czyli wszystko się zgadza.
A więc wszystko nam działa i mamy zaimplementowane
wszystkie query dla naszej aplikacji książek.