Najważniejsze zagadnienia, które musisz znać
5 godz. 53 min · JavaScript · Full-stack i Programowanie
Adam GospodarczykPrzesyłanie oraz transformacja danych to jeden z najważniejszych elementów działania każdej aplikacji. Dobre zrozumienie tego w jaki sposób odbywa się ten proces, daje równocześnie lepsze zrozumienie całej struktury oraz podejmowania decyzji projektowych. W tym kursie znajdziesz lekcje, które pozwolą Ci uporządkować wiedzę na temat protokołu HTTP oraz formatów wymiany danych.
REST oraz GraphQL to nadal nieodłączone zagadnienia tematu wymiany informacji w kontekście aplikacji webowych. Pomimo tego, że ich koncepcje zwykle są bardzo dobrze opisane w różnych źródłach, tak ich wykorzystanie "na produkcji" potrafi sprawić problemy. W szczególności gdy weźmiemy pod uwagę, wyjątki oraz fakt, że nie każda aplikacja będzie wymagać implementacji REST czy GraphQL w 100%. W tym kursie znajdziesz wiele praktycznych wskazówek związanych z pracą z REST API oraz wprowadzenie do pracy z GraphQL.
Niektóre błędy w aplikacji są bardzo pożądane, w szczególności gdy jasno informują użytkownika o tym, co się wydarzyło oraz o tym, co może z tym zrobić. Pomimo tego, że w wielu przypadkach opracowanie komunikatów leży w rękach osoby odpowiedzialnej za copywriting (i/lub ux writing), tak sama implementacja tych komunikatów odbywa się po stronie kodu. Nie rzadko okazuje się, że poprawna i skuteczna walidacja danych oraz obsługa błędów nie jest oczywista w "produkcyjnych" sytuacjach. W tym kursie znajdziesz najczęściej spotykane problemy oraz sposoby ich rozwiązania.
Bazy danych są praktycznie nieodłączną częścią każdej aplikacji. W roli full-stacka prędzej czy później przyjdzie Ci z nimi pracować a nie rzadko nawet projektować oraz rozbudowywać ich struktury. W tym kursie znajdziesz informacje o bazach danych, które pozwolą Ci je zrozumieć oraz od razu poznać użyteczne techniki, które pomogą Ci w pracy z nimi, zarówno na produkcji jak i w środowisku lokalnym czy testowym.
Nie wszystkie informacje w aplikacji są publiczne. Niektóre wprost nie mogą takie być. Z tego powodu niezbędne są sposoby na to aby poznać a potem weryfikować tożsamość użytkownika, by na jej podstawie przydzielać mu dostęp wyłącznie do zasobów, do których odczytywania posiada uprawnienia. Istnieje wiele technik, które umożliwiają zarządzanie dostępem do danych i w tym kursie poznasz najważniejsze z nich. Dowiesz się nie tylko w jaki sposób zabezpieczać dane ale poznasz też najpopularniejsze sposoby na to aby te zabezpieczenia łamać i obchodzić. Mając świadomość takiej możliwości, będziesz w stanie lepiej podejmować decyzje o tym jak projektować dostęp do informacji.
Istnieją problemy charakterystyczne dla niemal każdej aplikacji. W związku z ich powszechnością, istnieje też szereg rozwiązań lub sposobów na to, aby możliwie zredukować ich następstwa. Na przestrzeni lekcji tego kursu zobaczysz wiele przykładów, które pomogą Ci w codziennej pracy a niekiedy nawet, pozwolą uniknąć błędów, których konsekwencje nie zawsze występują natychmiast.
Kurs powstał z myślą o osobach, które chcą rozwijać się w roli full-stack web developera / developerki, przeprowadzając przez najważniejsze zagadnienia z obszaru wymiany, transformacji oraz przechowywania informacji w aplikacji oraz pomiędzy aplikacjami. Jeżeli potrzebujesz zobaczyć szeroką perspektywę tego, w jaki sposób dane przepływają pomiędzy różnymi częściami aplikacji, lub ugruntować swoją wiedzę na ten temat, to ten kurs jest miejscem, którego szukasz.
Kolejnym tematem dotyczącym komunikacji aplikacji są wierzchołki.
Często nazywane są odwróconym API ze względu na to, że wykorzystywane są w
kontekście zdarzeń, które dzieją się po stronie aplikacji bądź zewnętrznych usług
i w momencie ich wystąpienia dochodzi do przekazania informacji.
Przykładem może być sklep internetowy,
który w momencie zamówienia oczekuje na zrealizowanie płatności i też informację z
systemu i też informację z systemu płatności, że ta transakcja została
zrealizowana Na podstawie właśnie wierzchołka, który udostępnia taki sklep.
Zostają przesłane niezbędne informacje do tego, aby zidentyfikować daną transakcję i
też przykładowo po pierwsze zarejestrować zrealizowane zamówienie, a po drugie np.
przydzielić klientowi dostęp do produktu.
Jeżeli chodzi o same wierzchołki, to
niezależnie od tego, w którą stronę przesyłają one dane, zwykle mówimy o
unikatowych adresach, które identyfikują konkretną aplikację, bądź też ewentualnie
identyfikują konkretny web, a następnie w zależności od przesłanych
danych na ten web może zostać podjęta różna akcja.
Następnie same wierzchołki mogą zarówno
obsługiwać dane, które trafiają do Twojej aplikacji, czyli to ona wtedy nasłuchuje
na zdarzenia lub też Twoja aplikacja może wysyłać zdarzenia do innych serwisów.
Za chwilę pokażę Ci jak to konkretnie może
wyglądać, natomiast musisz wiedzieć, że zwykle wierzchołki obsługiwane są po
stronie backendu, głównie ze względów bezpieczeństwa,
aczkolwiek oczywiście nic nie stoi na przeszkodzie, aby w sytuacji, gdy to
bezpieczeństwo nie jest aż tak wymagane, móc przesłać dane na wierzchu.
Po stronie frontendu.
Musisz mieć tylko świadomość, że w takiej
sytuacji dość łatwe jest przesłanie niepożądanych danych na taki adres.
Idąc dalej,
koniecznym wymaganiem w przypadku wierzchołków jest logowanie zdarzeń
zarówno tych odbieranych, jak i wysyłanych.
Chodzi o to, że w momencie, gdy mamy do czynienia z usługami, które komunikują się
między sobą, musimy zadbać również o różnego rodzaju błędy.
I tutaj nie mówię tylko o błędach
występujących z przetwarzaniem informacji, ale również o błędach z połączeniem.
Czasem web nie zostanie poprawnie odebrane i w takiej sytuacji konieczne będzie
przynajmniej uzyskanie dostępu do informacji, które miały zostać wysłane.
Następnie jeżeli chodzi o development z wykorzystaniem wierzchołków, to w
przypadku local hosta konieczne jest wystawienie go do sieci.
Przykładowo, jak wiesz zdarza mi się rozwijać system obsługujący płatności.
I właśnie w takiej sytuacji mam do czynienia ze zdarzeniami, które nie tylko
są wysyłane z mojej aplikacji, ale również do nich wracają i wtedy konieczne jest to,
aby zewnętrzna usługa mogła skontaktować się bezpośrednio z moim komputerem.
No i ostatecznie w przypadku tych najbardziej wrażliwych wierzchołków ważne
jest to, aby zastosować mechanizmy obsługujący tzw.
sygnaturę. Jest to dość złożony system zabezpieczeń,
polegający na tym, że praktycznie niemożliwe jest przesłanie i poprawne
obsłużenie danych, które pochodzą z nieautoryzowanego źródła.
I teraz zobaczmy, jak obsługa wierzchołków może wyglądać w praktyce.
Oczywiście na dość prostym przykładzie.
Jak zwykle utworzyłem tutaj prostą
aplikację Messages, która w tym przypadku posiada dwa endpoint.
Jeden umożliwia wykonanie zapytania typu GET i załóżmy, że np.
będzie to obsługa zamówienia, która wymaga
wysłania powiadomienia do zewnętrznej usługi.
Do drugiej endpoint z kolei będzie
reagować na zdarzenia, które trafiają do naszej aplikacji.
W tym przypadku będzie je tutaj logować, a następnie zwracać odpowiedź informującą,
że rzeczywiście doszło do odebrania takiego połączenia.
Nasza aplikacja w tym momencie działa,
więc w momencie, gdy wejdę sobie na adres localhost 3000, no to w tym momencie mam
informację o tym, że zamówienie zostało odebrane.
Ale zwróć uwagę na to, że notyfikacja, która miała zostać przesłana do
zewnętrznej usługi nie została przesłana poprawnie.
Ale jednocześnie tutaj oczywiście tylko mamy console log.
Natomiast nic nie stoi na przeszkodzie,
abyśmy mogli zapisać taką informację w systemie logów, bądź też nawet
bezpośrednio w bazie danych i poinformować użytkownika, kto może być zainteresowany
tą informacją o tym, że notyfikacja nie została odebrana.
Jeżeli teraz ponownie uruchomię tę aplikację, to nasza zewnętrzna usługa
powinna być już dostępna i też mamy tego potwierdzenie.
W związku z tym, że nasz Web Hub został obsługiwanej przez Majkę, to zwróć uwagę,
że mamy tutaj informację, która została przesłana z naszej aplikacji, a tutaj mamy
odpowiedź, która została zwrócona z powrotem i dokładnie wiadomość, która
została przesłana w tym miejscu została wyświetlona również tutaj.
I swoją drogą ja tutaj powtórzyłem to zapytaniem.
Natomiast też warto uwzględnić to, aby pracując z wierzchołkami dostarczać na
przykład jakiś dodatkowy identyfikator bądź cokolwiek, co pozwoli nam stwierdzić,
czy nie zostało wysłane wielokrotnie w sytuacji, gdy nie jest to pożądane, np.
w momencie, gdy informujemy zewnętrzną usługę, że doszło do jakiegoś zamówienia.
Tu raczej nie chcemy przypadkowo wysyłać takich samych powiadomień ponownie.
I teraz jeżeli Cię to interesuje, to tutaj odwołujemy się do tak zwanej warstwy
serwisowej, która odpowiada za przesłanie danych z pomocą Notepad na wskazany adres.
Jedyne co ją interesuje to dane, które chcemy przesłać, a następnie reszta zadań
razem z obsługą błędów dzieją się już w tym miejscu.
No to teraz przyjrzyjmy się jeszcze
drugiemu scenariuszowi, w przypadku którego to make będzie wykorzystywać
akurat moduł HTTP do tego, aby skontaktować się z naszą aplikacją.
I zwróć uwagę, że mam tutaj adres end root, a to oznacza dokładnie tyle, że
aktywowałem sobie tutaj polecenie ng http localhost 3000.
W ten sposób moja aplikacja została udostępniona na świat zewnętrzny, więc po
skopiowaniu tego adresu mogę przekazać go po prostu tutaj.
W rezultacie jeżeli teraz makro wykona
zapytanie na ten adres, no to informacja zostanie przesłana do NG Rock,
a ten w konsekwencji przekaże ją do naszej aplikacji Next.
Efekt końcowy jest dokładnie taki, że informacja z Make trafiła do naszej
aplikacji, a w związku z tym, że wysłaliśmy tutaj obiekt z odpowiedzią,
jesteśmy w stanie go odczytać również tutaj.
Oczywiście miej na uwadze fakt, że w tym momencie korzystamy z platformy Mail,
natomiast tak naprawdę tak samo działa to w przypadku innych usług, które
umożliwiają wymianę danych w jedną lub drugą stronę z pomocą wierzchołków.
I tutaj chciałbym zwrócić Twoją uwagę na fakt, że właśnie w przypadku Maka
wygląda to prawdopodobnie tak, że mamy tutaj do czynienia z oddzielną aplikacją
make, która zajmuje się wyłącznie obsługą wierzchołków.
W związku z tym, że jest to dość duża platforma, jak i też system obsługi takich
zdarzeń jest z całą pewnością bardzo złożony, z dość dużym prawdopodobieństwem
twórcy Maka utworzyli oddzielną aplikację, która prawdopodobnie wystawia tylko jeden
endpoint zawierający unikatowy identyfikator dla każdego z wierzchołków.
Oznacza to, że jako użytkownik jestem w stanie utworzyć sobie nowy wiek, który
zostaje zarejestrowany w bazie i otrzymuje ten unikatowy identyfikator.
W momencie, gdy scenariusz jest aktywny,
również zostaje to odpowiednio oznaczone w bazie i tym samym jeżeli wyślę tutaj
jakieś informacje, zostają one odebrane po stronie Maka.
Jeżeli będziesz rozwijać aplikację, która będzie wymagała od Ciebie utworzenia
podobnego systemu, to również możesz wykorzystać tą koncepcję.
Oczywiście niekoniecznie musisz tutaj od
razu tworzyć oddzielną aplikację, która będzie zajmować się wyłącznie
wierzchołkami, ale oczywiście jeżeli masz ku temu powód, to możesz tak zrobić.
Ważne jest tutaj to, aby wykorzystywać tą
informację o unikatowym identyfikatorze wierzchołka, który zostanie przypisany np.
do konkretnego użytkownika.
My i teraz tak w zasadzie wszystko co do
tej pory powiedziałem obsługuje większość scenariuszy, które dotyczą wierzchołków.
Pamiętaj jeszcze proszę o tym mechanizmie sygnatur oraz aby zawsze brać pod uwagę
to, czy dane, które zostają przesyłane na wierzchołek pochodzą z wiarygodnego źródła
oraz też czy nie są przypadkowo zduplikowane.
Absolutnym wymaganiem, o które naprawdę
warto zadbać, jest też logowanie zdarzeń, które zarówno trafiają na nasz web
oraz informacji zwrotnych, które są z niego wysyłane na zewnątrz.
Nie ma wątpliwości, że przechowywanie
takich informacji może okazać się dla Ciebie pomocne.
Jednocześnie zwracam Twoją uwagę na fakt,
aby w momencie, gdy przykładowo w Twojej aplikacji przesyłane jest hasło bądź inne
wrażliwe dane, to pamiętaj o tym, aby do logów trafiły w formie zabezpieczonej, tak
aby osoba, która uzyska dostęp do tych danych nie była w stanie ich wykorzystać.
A teraz dziękuję Ci za uwagę i zapraszam do kolejnych materiałów.