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.
Witam Cię w sekcji Mutacje.
W tej sekcji pokażę Ci jak dodawać dane
oraz jak datować, więc nie czekajmy i bierzmy się do dzieła.
Jesteśmy Scott i jesteśmy w Index czyli w pliku w którym trzymamy naszą slime.
To generalnie jak działają mutacje
wytłumaczyłem w pierwszym kursie, więc tam mógłbyś poznać podstawy.
Jeżeli byś sobie odpalił ten kurs mutacje to będziesz tam znał mniej więcej.
Na diagramach będziesz miał pokazane jak
te mutacje działają, jak działa asynchroniczne wykonywanie mutacji itd.
Natomiast teraz chciałbym Ci pokazać jak
te mutacje działają jeśli chodzi o kimchi, o recovery itd.
Tak naprawdę to się wiele nie różni.
To co musimy zrobić to dodać root station type w steamie i teraz tutaj będziemy
dodawać metody, które będziemy chcieli wykonywać.
To jest w zasadzie to samo co robimy
tutaj, tylko z tą różnicą, że w mutacjach będziemy dane zapisywać.
Natomiast wszystko inne jest dokładnie takie same.
Więc stwórzmy tutaj mutację ADD.
Autor.
I będziemy chcieli dodawać autora za pomocą tej mutacji.
Będziemy tutaj potrzebować jakiś input i będziemy potrzebowali coś zwrócić.
Ja proponuję, żebyśmy po prostu zwrócili typ author, czyli dodanego autora.
Może to być różne, to zależy od Ciebie.
Wiele osób na przykład dodaje takie typy jak response.
Gdzie tutaj wpisujemy jakiś stat, scout requestów itd.
Natomiast ja tutaj zastosowałem taką
technikę, że po prostu zwracam tego do danego autora.
Dodatkowo tutaj tak jak mówiłem
potrzebujemy dodać tego autora, więc musimy mieć tutaj jakiś input
i ten input musi mieć też swój typ nazwijmy go author input.
I tutaj będziemy musieli stworzyć taki typ i to nie będzie typ a input.
Czyli w zasadzie tworzymy to na takich samych zasadach jak tworzyliśmy typy.
Natomiast słowem kluczowym będzie tutaj po prostu input.
Więc stwórzmy input author input i będziemy musieli dostać first name.
Oraz wlasnej.
Dobra i to jest nasz input.
Więc teraz przejdźmy do Play.
Dobra, dodajmy nową zakładkę
i możemy teraz tutaj stworzyć mutację, czyli wpisujemy.
I mamy tutaj już podpowiedź, że mamy taką mutację jak autor.
I ta mutacja to autor.
Jeżeli przejdziemy do docka
dostaje autor input i ten author input jako argument jest to first oraz last.
Więc stwórzmy tutaj autor i podajemy właśnie tutaj First name.
I niech to będzie You i Last name.
I może to być to.
OK, i teraz tak jak mówiłem, tutaj musimy wybrać jakieś pola.
Niech to będzie ID.
I teraz jak widzisz nie możemy zwrócić nulla na label field.
To dlatego, że tutaj oznaczyliśmy to jako label.
Natomiast jeżeli byśmy oznaczyli, że może
być to null to pewnie dostaniemy teraz tutaj nulla.
To dlatego, że nie mamy Resolve, a więc
teraz będziemy musieli stworzyć resolve dla naszego autora.
I tak jak się pewnie domyślasz w naszych
rezultatach dla autora będziemy musieli tutaj
wyeksportować kolejną rzecz i to będzie analogiczne.
Po prostu zrobimy skrót.
Mnie też rewolwer.
I tutaj dodamy Add Auto.
Function.
I również tutaj będziemy przyjmować takie
samo parametry, czyli parent, argument oraz kontekst.
Tutaj się nic nie zmienia, ale jest tutaj bardzo spójny w tym.
Więc jako argument będziemy dostawać autora.
Z kontekstu wybierzemy bazę danych i teraz będziemy chcieli coś zrobić na tej bazie.
Natomiast żeby dodać autora, to jeżeli zerkniemy sobie szybko na bazę
danych to autor ma takie pola jak ID oraz własnej, więc będziemy potrzebować ID.
Ponieważ tutaj dostaniemy First class name, natomiast nie mamy ID
i chcemy żeby ta ID było unikatowe, więc będziemy je po prostu generować.
Ja do tego użyję takiej biblioteki jak ID,
więc po prostu ją sobie zainstalujemy i później według instrukcji użyjemy tego
id v4 i będzie nam to generowało unikatowy string i taki będziemy właśnie pod takim
stringa będziemy zapisywać autorów w bazie danych.
A więc zainstalujemy bibliotekę, musimy wyłączyć serwer i zrobić npm install id.
Teraz, kiedy nam się to zainstalowało, przejdźmy tutaj jeszcze raz.
Skopiuję sobie w zasadzie ten kawałek kodu, ten import.
I za importujemy go w tym miejscu i teraz będziemy to ID używać aby wygenerować ID.
Możemy to zrobić w ten sposób.
W ten sposób za każdym razem, kiedy
wywołamy ad autor, wygenerujemy unikatowy identyfikator niego.
Teraz możemy stworzyć pole autora, czyli.
Autor.
Będzie.
W zasadzie mamy już taką zmianę jak autor, więc może być autor DBI.
First name.
Autor Fair Name.
Teraz również będzie o last name oraz musimy jeszcze tutaj dodać ideę.
No i teraz to co będziemy chcieli zrobić to zwrócić tego autora.
Czyli autor dba.
Oraz będziemy chcieli do naszej bazy danych fałszować tego autora.
Czyli będziemy chcieli zrobić DB autorskie push czyli metoda na rakach.
Gdybyś miał MySQL a pewnie musiałbyś to zrobić jakiś insert.
Natomiast tak jak mówiłem działamy tylko i
wyłącznie na bazie danych i wpisujemy tutaj autor DB.
OK, więc zobaczmy czy to działa.
Odpalamy nasz serwer npm start.
W zasadzie jeszcze nie będzie działać, ponieważ nie mieliśmy tego
resolve R w indeksie, więc importujemy go tutaj i teraz Resolve.
Będziemy musieli również dodać taki type jak Station.
Czyli to jest dokładnie to co mamy opisane w systemie.
Cały czas ta korelacja obowiązuje.
I teraz już dodaliśmy.
Przejdźmy do Playground.
Wykonamy to ok.
Jeszcze nam się chyba serwer nie odpalił albo mamy jakiś błąd.
OK. Mamy jakiś błąd.
Brakuje przecinka.
Dobra, spróbujmy jeszcze raz, czyli podajemy autora.
Możemy od razu go później pobrać w tym
query, więc zobaczmy on się dodał z kopiujemy jego ID.
Jest to you do.
Jeżeli go teraz tutaj pobiorę to powinien się pokazać Pobierz mnie jeszcze.
Czyli jak robimy Get Autor i jak widzisz jest on już w naszej bazie danych.
Będzie oczywiście to działało do momentu
odświeżenia strony ze względu na to, że jest to w pamięci teraz tej sesji.
Dlatego, że nie modyfikujemy pliku tylko działamy na na jego referencji.
To już wszystko w tej lekcji, a już teraz
zapraszam Cię do kolejnej, gdzie pokażę Ci jak dodawać relacyjne dane.