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.
W tym momencie pokażę Ci, w jaki sposób pracować z Falloutem zarówno po stronie
frontendu, więc w pewnym sensie może to być dla Ciebie powtórzenia, a jednocześnie
będziemy korzystać z backendu, który przygotowałem na potrzeby tej lekcji i
będziemy do niego również zaglądać w kolejnej.
Zacznijmy od tego, że przeniesiemy się do
naszego projektu, który jest niczym innym jak starterem WiP.
Mamy tutaj jeden plik, który wykorzystamy do tego, aby za pomocą Fetch API
skontaktować się z naszym backend w celu przesyłania informacji.
Pierwszym endpoint będzie tutaj localhost 3000 slash tekst.
Backend przygotowany jest w taki sposób, aby akceptować dane, które.
Tak jak powiedziałem, w tym przypadku mogą być przesłane wyłącznie za pomocą np.
metody POST, czyli takiej, która umożliwia przesłanie ciała zapytania.
I teraz musimy ustawić odpowiednie nagłówki, aby zarówno serwer jak i nasz
klient wiedzieli czego mają się spodziewać.
Ustawiłem to tak, że nasz content type,
czyli to co przesyłamy razem z zapytaniem będzie ustawione na tekst plain, a z
serwera będziemy spodziewać się odpowiedzi zapisanej w formacie JSON.
Jeżeli chodzi o ciało samego zapytania
to nie ma tutaj zaskoczenia, ponieważ w związku z tym, że przesyłamy zwykły tekst
również ciało zapytania ustawiamy na taki sam format.
No i teraz jeżeli wykonamy to zapytanie, a
następnie podajemy za pomocą konsoli loga tylko aktywuje tutaj powłokę,
to rezultat będzie taki, że naturalnie znajdujemy się tutaj w środowisko.
Mądrze jest, więc brakuje nam tutaj importu, który musimy zainstalować.
Po chwili wszystko zaczyna tutaj działać i w odpowiedzi otrzymujemy obiekt Bison,
który przesyła nam dokładnie taką samą informację, jaką przesyłamy do niego.
Zatem jeżeli tutaj modyfikuje to nasze
zapytanie, to odpowiedź również będzie zmodyfikowana.
Oznacza to, że dochodzi do komunikacji i odpowiedniej interpretacji formatu danych.
No to teraz skontaktujemy się z takim
endpoint em, który obsługuje x www form url encoder.
Ponownie wykonujemy tutaj zapytanie typu
fetch z tą różnicą, że na inny endpoint i ponownie ustawiamy tutaj metodę na POST, a
nagłówki w taki sposób, aby opisywały to co chcemy przesłać.
W odpowiedzi ponownie spodziewamy się
obiektu, który będzie zawierać informacje, które przesyłamy na serwer.
W tym przypadku w związku z Falloutem, z
którym mamy do czynienia, przesyłamy te informacje w formie kluczy oraz wartości,
czyli dokładnie tak jak w przypadku Query String, ale możemy tutaj wykorzystać
metodę, która umożliwia nam przesłanie ciała zapytania.
I teraz jeżeli X interpretujemy tą odpowiedź, to jak widzisz mamy dokładnie
obiekt odpowiadający strukturze zapisanej w ciele zapytania.
Ponownie myślę, że nie ma tutaj większego
zaskoczenia, aczkolwiek jest kilka rzeczy, na które warto zwrócić uwagę.
Mianowicie niewykluczone, że dość trudne
będzie przesyłanie informacji w taki sposób, aby łączyć tutaj klucze oraz
wartości oraz pamiętać o odpowiednim umieszczeniu znaku SAMP.
W związku z tym zdecydowanie lepszym
pomysłem jest tutaj wykorzystanie klasy i URL.
Parametr tutaj możemy przekazać po prostu
obiekt zawierający poszczególne właściwości.
Jak widzisz, do tego konstruktora możemy przekazać dowolny obiekt Johnson i
wszystko zostanie poprawnie zinterpretowane.
Tutaj jeszcze dodam, aby było to dla
Ciebie jasne, że z tego formatu przeglądu korzystasz zawsze wtedy, gdy potrzebujesz
przesłać większą liczbę informacji, ale nie potrzebujesz przesyłać plików.
Wtedy nie ma potrzeby sięgania po multiple
data, tylko możemy wykorzystać właśnie taki format.
No to zobaczmy teraz jak radzić sobie z
tym kolejnym, jeżeli chodzi o Multi Platform Data.
Musimy zaimportować sobie dodatkową zewnętrzną bibliotekę Form Data, ale
oczywiście w przeglądarce nie ma takiej potrzeby.
Po prostu w przypadku zastrzeżenia
Kłodzka, że znajdujemy się w środowisku, no i wtedy konieczna jest ta zależność.
Jeżeli chodzi o przygotowanie danych,
które możemy przesłać w taki sposób, możemy wykorzystać właśnie albo formularz,
albo klasę Form Data, która udostępnia nam proste metody, takie jak np.
append, z których pomocą możemy ustawić
nasze informacje, w tym również referencje do plików.
No i teraz jeżeli przygotujemy sobie
zapytanie kierujące na odpowiedni endpoint oraz ustawimy jego odpowiednią metodę oraz
nagłówki, to będziemy mogli wykonać to zapytanie.
I tylko tutaj zaznaczę, że w przypadku fetch nie ma potrzeby ustawiania Multiple
form data, ponieważ przeglądarka w tym przypadku środowiska duże jest
w stanie samodzielnie za nas określić ten nagłówek i dodać tzw.
daty, czyli ograniczenie, którego w tym momencie nie musimy definiować sami.
Zasadniczo tak jak widzisz mamy tutaj poprawną odpowiedź, która jak zwykle jest
uzależniona od tego, co zostanie przesłane na serwer.
W rezultacie, jeżeli chodzi o Multiple Data, jedyne co musisz zapamiętać to to,
że informację przesyłasz właśnie za pomocą klasy Form Data.
Z pomocą tutaj metod ustawiasz
poszczególne właściwości, które trafiają na serwer.
I teraz. Ostatniej formy przesyłania informacji,
czyli konkretnie do Application Flash Jameson.
Tutaj myślę, że sytuacja jest Ci już
doskonale znana ze względu na to, że ponownie ustawiamy metodę zapytania i jej
nagłówek oraz oczywiście body, które w tym przypadku nie może zostać przekazane
bezpośrednio jako obiekt Jameson, tylko jako tzw.
Jameson String.
I teraz, aby przekształcić obiekt Jameson
na ciąg znaków, wykorzystujemy metodę obiektu Jameson.
No i teraz chyba nie ulega wątpliwości, że jeżeli wykonamy to zapytanie, to w
odpowiedzi również uzyskamy adekwatną informację.
Pamiętaj proszę o tym, że odwrotnością
Jameson String jest metoda Jameson, do której przekazujemy właśnie
swing i jeżeli jest on zapisany w odpowiedniej formie, zostanie
przekształcony do obiektu, do którego właściwości będziemy mogli odwoływać się
już w klasyczny dla obiektów Jameson sposób.
Jedyną rzeczą, na którą trzeba zwrócić
uwagę przy formowaniu obiektów Jameson, są wszelkiego rodzaju znaki specjalne.
Jeżeli przykładowo wewnątrz naszego
obiektu pojawi się cudzysłów, to aby go umieścić musimy wykorzystać.
Do tego, aby skopiować specjalny znak.
Warto o tym pamiętać, tym bardziej, że jest to rzecz, którą bardzo łatwo pominąć.
A tymczasem, jak widzisz, jeżeli chodzi o pallad i różne jego rodzaje, po stronie
frontendu sytuacja ma się stosunkowo prosta.
Jeżeli chodzi o plain text, to w zasadzie myślę, że wystarczy, że będziesz wiedzieć,
że da się przesyłać informacje w takiej formie.
Jeżeli chodzi o x www form url encoder to
sięgaj po ten format zawsze wtedy, gdy nie przesyłasz obiektu Jameson, ale musisz
przesłać informacje, które nie zawierają plików.
Z kolei jeżeli takie pliki istnieją, wykorzystaj Multiple Form Data.
Jest to najbardziej pod tym względem
elastyczna metoda, która umożliwi Ci przesyłanie nawet większych plików.
Ale tutaj dodam od siebie, że w przypadku bardzo dużych plików uwzględniających np.
kilkaset lub kilkanaście GB danych warto
poczytać o tym, w jaki sposób można obsługiwać np.
progress bar bądź nawet metody
umożliwiające wznowienie wgrywania takiego pliku.
No i jeżeli chodzi o application Jameson jedyną rzeczą, którą musisz zapamiętać
jest kodowanie obiektów Jameson do ciągów znaków.
W takiej sytuacji trzeba pamiętać o
metodach Swing i Fiore oraz oczywiście o tym, aby w kodowanych w
ten sposób wartościach nie znalazły się jakieś znaki specjalne, które mogą z
różnych powodów doprowadzić do sytuacji, w której te metody zawiodą.
Takim klasycznym przykładem, z którym spotykam się najczęściej jest
przekazywanie do metody Jameson Parts informacji zwróconej z jakiegoś API.
W niektórych sytuacjach zamiast obiektu
Jameson otrzymujemy właśnie plain text i w rezultacie taka metoda nie wykonuje się
poprawnie i tym samym też wysypuje całą naszą aplikację.
Myślę, że warto o tym wszystkim pamiętać i
mam nadzieję, że wyjaśniłem Ci różnicę pomiędzy tymi różnymi rodzajami bailoutu i
też stało się to dla Ciebie bardziej oczywiste.
Tymczasem dzięki za uwagę i do usłyszenia za chwilę.