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.
Zajmiemy się dodawaniem relacyjnych danych.
A więc przejdźmy do szkoły.
Mamy tutaj już naszą pierwszą mutację. Autor.
Jak wiesz musimy dodać input itd. Itd.
Teraz będziemy chcieli dodać książkę.
Natomiast jeżeli popatrzysz na bazę danych to tak naprawdę książka ma tutaj
jakieś ID autorów i będziemy musieli mieć możliwość dodać jej do autorów.
Relacyjne, czyli albo połączyć książkę z jakimś autorem, albo dodać nowego autora.
A więc przejdźmy do Scheme.
Dodajmy tutaj nową notację.
Niech to będzie artbook i musimy dodać jakiś input.
Niech to będzie Bóg input typu put, czyli input.
Za chwilę zdefiniujemy i analogicznie jak to autorzy tutaj zwrócimy ebook.
Tutaj zostaliśmy autor.
Czyli jeżeli dodamy książkę, to już tutaj zwrócimy.
Teraz zdefiniujmy ten book input i zgodnie z bazą danych mamy tutaj id
oraz pole authors pola, które będzie musiało być relacyjne.
Tytul dodamy.
A jeżeli chodzi o ID to je sobie wygenerujemy podobnie jak autor.
A więc to co musimy na pewno dodać to tutaj tytuł jako string i pola authors.
No i tutaj będziemy musieli stworzyć kolejny typ czyli autor connection input
i ten autor connection input będzie posiadał dwa pola.
Jedno to będzie create i drugie to będzie.
Connect zamiast create będzie posiadał input author input.
Dlatego, że jeżeli będziemy chcieli stworzyć autora to będziemy musieli taki
sam input dać jak podczas tworzenia autora za pomocą tej mutacji.
Tutaj po prostu wykonamy tworzenie autora
w mutacja book, natomiast input będzie musiał być ciągle taki sam.
Pewnie, że damy connect, czyli jakbyśmy
chcieli połączyć tego autora już z jakimś istniejącym.
I tutaj będziemy potrzebować kolejnego importu, czyli autor Connect Input.
I tutaj dodamy sobie input autor connect input i to będzie id s.
I to będą stringi czyli musimy tutaj podać.
Jeżeli chcemy dodać jakichkolwiek autorów to będziemy chcieli
tutaj przekazać tablicę stringów i to pole nie może być oczywiście null.
I tutaj również musi być string.
Nie może być takich sytuacji, że dostaniemy tutaj nulla.
Dobrze.
I teraz, żebyś zrozumiał jeszcze lepiej jak to działa, przejdź może do skusimy,
a raczej do Play Granda i przejdźmy do dokumentacji.
Mamy teraz tutaj artbook i możemy dodać tą książkę na dwa sposoby.
Czyli w argumentach możemy powiedzieć czy to będzie oczywiście tytuł możemy dodać.
Natomiast autorów możemy połączyć na dwa sposoby i możemy tutaj powiedzieć, czy
będziemy używać metody Create czy metody Connect.
Jeżeli będziemy używać metody Create,
czyli dodamy tutaj film Create, to wtedy będziemy musieli podać dane
nowego autora i wtedy nam się nowy autor utworzy.
Natomiast jeżeli powiemy, że chcemy dodać connect, to wówczas będziemy musieli podać
tutaj pole id s i id tych autorów, których chcemy połączyć do danej książki.
Więc myślę, że to już jest jasne.
Chwilkę to sobie implementujemy na dwóch
przykładach, więc przejdźmy do Bóg rewolwer.
I teraz mamy tak Bóg, będziemy potrzebować
rud, czyli w ten sposób eksportowy station rezerwuar.
I tu będziemy po prostu tu dodawać ad Bóg i oczywiście te wszystkie metody.
Są ciągle takie same.
Dobra i teraz musimy tutaj się połączyć.
Na początku musimy dodać książkę, czyli
stworzyć teoretycznie dodawanie nowej książki, a później połączyć się z autorem.
Czyli będziemy musieli tutaj sprawdzać dwie metody.
Pierwszą rzeczą, jaką będziemy musieli zrobić to stworzenia ID.
Czyli tutaj zrobimy to samo co robiliśmy w
w authors R, więc możemy ten kod sobie skopiować.
I zaimportować tutaj naszą bibliotekę.
Więc mamy ID. Dobrze.
Stwórzmy teraz tutaj
Shape naszej nowo dodanej książki, czyli niech to będzie book.
I tutaj oczywiście musimy mieć ID, tytuł i tytuł.
Możemy sobie z tych argumentów wybrać.
A więc my tutaj dostajemy Book input i w tym jest m.in. tytuł.
A więc możemy ze struktury zabrać ten obiekt oraz Authors.
W porządku.
Możemy też dostać tutaj authors.
Na razie niech to będzie pusta tablica.
Za chwilę to implementujemy.
I teraz chcemy zwrócić tą książkę, a przed zwróceniem chcemy ją dodać do bazy danych.
Czyli tutaj musimy sobie.
Dobrać się do bazy danych i DB push bo.
No dobra, to była łatwiejsza część.
Teraz będziemy musieli sobie połączyć naszą książkę z autorami.
No i tutaj dostaniemy dwa typy.
Raz to będzie connect, a raz to będzie create.
Najpierw przejrzymy sobie connect, czyli
sprawdźmy, czy dostaliśmy takie pole connect.
Jeżeli tak,
to czy w tym polu również dostaliśmy pole ideas i czy ono ma jakąś długość?
Czyli czy ktoś przesłał tam jakieś ID?
Jeżeli tak, to będziemy tutaj chcieli dobrać się do autorów i wyszukać tych ID.
No więc moglibyśmy tutaj stworzyć jakiś obiekt.
Niech to będzie left.
Czyli za co autorce.
To będzie tablica
i teraz do tej tablicy będziemy chcieli wrzucać autorów, czyli Wizards.
Authors to będzie Authors connect items, czyli dokładnie to.
Będziemy chcieli się przejść po tej tablicy.
A więc zróbmy mapa i zwrócić nową tablicę
z tymi autorami, których udało nam się połączyć.
Tak naprawdę moglibyśmy też po prostu wrócić, natomiast wtedy nie będziemy mieć
pewności, że dany indeks tak naprawdę istnieje.
Będziemy mogli dostać też tutaj nulla.
Dobra, więc jeżeli to tak zrobimy, wtedy
będziemy mieć pewność, że dany autor istnieje w naszej bazie danych.
Więc tutaj zróbmy sobie ID.
No i dobra, będziemy teraz chcieć dostać
się do autorów, a więc będziemy musieli użyć sobie metody
GET autor z Auto resolve, a więc ze importujemy sobie tą metodę.
Dobra tutaj.
Import.
Total to resolve.
Autor Alvarez.
I teraz wykonajmy sobie tutaj taką operację.
Autor.
Roota auto czyli serwer resolve get autor.
I tutaj musimy podać Barentsa, którego nie
mamy i musimy podać tutaj argumenty, czyli argumenty jakie przyjmuje autor to
jest ID oraz musi jeszcze dostać bazę danych.
Czyli tutaj podamy ID, a tutaj podamy bazę danych.
I tutaj pobierze nam się autor.
I dodatkowo będziemy musieli jeszcze raz sprawdzić czy ten autor tutaj jest.
Jeżeli go nie ma to nic nie zwrócimy, czyli będzie null w naszej tablicy.
Natomiast jeżeli jest to możemy zwrócić po prostu autor.
Autor ID, a jeżeli tutaj tego pola nie będzie, to nic nie zwrócimy.
Czyli możemy zrobić to w taki sposób.
I gdyby Twoja metoda GET autor używała
jakichś requestów do API, to pewnie tutaj musiałbyś użyć wata i poczekać na te dane.
Natomiast nasza metoda nie używa niczego asynchronicznego.
Po prostu wybieramy coś z pliku docelowego, więc tego nie potrzebujemy.
Dobra, korekty zrobione, Możemy teraz
sprawdzić czy to działa, więc zapiszmy ten plik.
Oczywiście musimy resolve również dodać do naszej definicji resolve.
Oczywiście to też będzie autorski.
A tutaj będzie Bóg.
To musimy oczywiście zmienić też autora rewolwer.
Za chwilę to zmienimy.
Brawo!
A tutaj będziemy mieli.
Ein Book Rewolwer.
Dobra, teraz musimy to sobie tutaj zaimportować.
I dorzucić w tym miejscu.
W porządku, powinno być ok, więc przejdźmy do Play.
Przejdźmy do.
Autor chyba nie ma to Adblock. OK.
Musimy działać na mutacjach.
Dobra i wybierzmy na szybko pole ID.
Natomiast tutaj musimy podać pewne rzeczy, czyli musimy podać i to będzie Bóg input.
I podajemy na początku ID, nigdy tylko tytuł.
I niech to będzie new Amazing Book.
Musimy podać jeszcze tutaj autorów, czyli kto będzie tym autorem.
Mamy teraz dwie możliwości albo podamy tutaj Create, albo Connect.
My jeszcze nie mamy zaimplementowane, więc musimy użyć Kinecta.
Ikonek będzie przyjmował jedno pole.
Tutaj i to pole to będzie id s hds i tutaj musimy dostać tablicę z id autorów.
Więc przejdźmy do jakiegoś autora.
Niech to będzie ten termin. Kolejnego np.
przypiszemy do tej książki.
Dobra, mamy tu jakiś błąd.
Jeszcze widzę.
Zobaczmy co jest nie tak.
Wygląda wszystko okej według mnie.
OK, źle zaznaczyliśmy to w systemie, czyli
po prostu zaznaczyliśmy, że musimy mieć ikonę create, co jest nieprawdą.
Potrzebujemy mieć tylko i wyłącznie.
Pole jedno albo drugie.
Więc one nie mogą być jakoś oznaczone jako wymagane.
Dobra, teraz spróbujmy wykonać i mamy
teraz Country Property Connect, więc wróćmy do kodu i tutaj.
W tym miejscu mamy błąd.
Tak, ponieważ struktury użyjemy.
Zły, bo tak naprawdę mam argument i jako
argument dostajemy Bóg input, czyli to i z tego Bóg input musimy wybrać sobie ten
autor, czyli zróbmy to w ten sposób i tytuł.
I teraz myślę, że będzie działało.
Przejdźmy tubkę jeszcze raz, wykonajmy DB push list na TV.
To będzie raczej prosty błąd. Tak musimy.
Do książek nie możemy, bo
bezpośrednio do bazy danych dodać książki, tylko musimy do jakiejś tabeli.
Dobra, więc wróćmy jeszcze raz do trzech razy sztuka.
OK? I udało się.
Mamy dodaną książkę, mamy hit, więc teraz
pobierz tą książkę, potem ID i zobaczymy jakiego ona ma autora.
A więc przejdźmy do tej mutacji.
Tytuł powinien być.
Takie, jakie podaliśmy.
Natomiast tutaj wybierzmy autorów.
Wybierzmy First oraz Last name.
OK, mamy pustego autora, więc zobaczmy co się dzieje.
I tutaj mamy problem, ponieważ nie podpisaliśmy tych autorów, których właśnie
tutaj stworzyliśmy, tylko ciągle zwracamy pustą tablicę.
Nic nie może być inaczej.
Musimy tutaj tych autorów podpiąć i teraz będziemy mieć tych autorów tak naprawdę.
Więc teraz się zapiszą, co zapiszą poprawnie w bazie danych.
Natomiast musimy jeszcze raz dodać książkę.
Więc może zmieńmy tą nazwę w ten sposób.
Aniu, Amazing Book 2 Dodajmy jeszcze jedną książkę.
Jest nawet.
I teraz jeszcze raz book.
Pobierz tą książkę i zobaczymy czy będzie teraz ten nasz autor działał.
I działa.
Czyli on się tutaj już dodał.
Mamy tą relację zrobioną z autorem, a więc
dodaliśmy i mutację dla książki, ale przy okazji dodaliśmy kontakt do autora.
No i teraz kolejną rzecz. Ostatnia jaką zrobimy to jest dodanie
tej możliwości tworzenia autora, czyli już tutaj.
Nie przedłużając sprawdzimy czy mamy tutaj, czy ktoś użył metody Create.
I jeżeli tak, to będziemy chcieli stworzyć autora.
Czyli będziemy musieli użyć ród tj.
.
Autor Solver.
Nie będziemy musieli wykonać metody, aby autor.
Czyli tutaj będziemy chcieli zrobić czyli zarost autorski i przypisać do AD autor.
I tutaj tak naprawdę dostaniemy pola w tym w tym create,
ponieważ w tym miejscu mamy to zdefiniowane, że create będzie przyjmowała
author input, czyli w kreacji będziemy mieć pola first class.
Więc wróćmy tutaj.
I przyjmiemy tutaj kilka argumentów.
Autor przyjmuje pole Autor.
Zgadza się.
I autor oferty Last Name.
Dobra, musiałem przekazać autor oraz bazę danych.
Czyli parent jest null.
Tutaj jako autor przekażemy.
Autorskie.
A tutaj przekażemy bazę danych.
Dobra, wygląda to ok.
Myślę, że.
To, co jest jeszcze ważne, to tak naprawdę, że tutaj będziemy chcieli tego
autora dostać tylko jego ID, czyli tutaj stwórzmy sobie detektor.
Czyli tu dostaniemy cały obiekt, a dla autora przypiszemy tablicę z ADD.
Autor said.
Dobra i wtedy będzie w porządku.
Więc wróćmy do.
Mamy teraz tutaj bug i zmienimy ten connect na create.
Czyli będziemy chcieli od razu tworzyć nowego autora.
I tutaj dodamy sobie First name.
Niech to będzie moje imię oraz Last name.
Moje nazwisko.
I wykonajmy tę metodę.
Nagle coś się zrobiło, coś się dodało.
Skopiuj ten ID i pobierz sobie tą książkę.
OK i jak widzisz jestem dodany.
Wcześniej nie było takiego autora.
Mogę jeszcze pobrać tutaj id i dla pewności, żebyś widział, że ten autor
istnieje, możemy go pobrać za pomocą metody get Autor.
Natomiast to już jest tylko dla.
Pewności. OK.
Czyli jest taki autor dodany w bazie danych i to już wszystko.
W tej lekcji nauczyłeś się jak dodawać
dane relacyjne, czyli nauczyłeś się jak dodawać książki w naszej aplikacji oraz
przy okazji jak tworzyć lub połączyć z nimi autora.
A ja już teraz zapraszam Cię do kolejnej lekcji.