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 tej lekcji przyjrzymy się temu, w jaki
sposób obsługiwany jest pilot po stronie backendu.
Do wykonywania zapytań wykorzystamy w tym przypadku narzędzie Insomnia, które jak
wiesz stanowi alternatywę dla post mana i działa zasadniczo bardzo podobnie.
Naszym pierwszym punktem będzie
przesyłanie za pomocą metody post zwykłego tekstu.
W związku z tym
ustawiam na plain i wpisuję tutaj jakikolwiek tekst, który zostaje
przesyłany na backend i zwrócony w formie obiektu Jameson.
Jeżeli przyjrzymy się jak to wygląda po
stronie backendu, to sytuacja jest o tyle ciekawa, że w pierwszej kolejności musimy
utworzyć sobie endpoint, który będzie przechwytywać ciało zapytania, czyli body.
W przypadku frameworka News, że jest wykorzystujemy tzw.
dekorator, o którym również będziemy sobie jeszcze mówić.
Ważne jest tylko to, aby było dla Ciebie
jasne, że pod tą zmienną mamy dokładnie bailout naszego zapytania.
Co więcej, jeżeli chodzi o sam numer, że jest i np.
frameworki takie jak Expression czy obecne
tutaj bardzo często istnieje potrzeba instalacji tak zwanego body parsera.
Jest to specjalna paczka, która zajmuje
się właśnie tym, aby z zapytania przesłanego na nasz serwer wyeksportować
dane pochodzące z palladu i zrobić to w odpowiedniej formie.
W przypadku MSG sytuacja jest o tyle prostsza, że body parser jest już w niego
wbudowany, więc nie musimy robić niczego dodatkowego.
Jednak dodatkowe kroki pojawiają się w
momencie, gdy mamy do czynienia z przesyłaniem tekstu.
Chodzi o to, że natywnie taka forma nie
jest wspierana i pewnie dlatego tak rzadko zdarza mi się z niej korzystać i w związku
z tym musimy tutaj zaimportować roboty z paczki o tej samej nazwie.
Dobra wiadomość jest taka, że taka paczka jest już dostępna wewnątrz zależności
zainstalowanych razem z method Jest, więc tylko ją importujemy, a następnie
przekazujemy do niej cały obiekt naszego zapytania.
W związku z tym tak naprawdę w tym momencie samo body nie jest nam tutaj
dostępne ze względu na to, że pasujemy je sobie w odpowiedni sposób, a następnie
zamieniamy na string i ucinamy w ten sposób.
W momencie gdy wysyłając zapytanie zajrzymy sobie do konsoli naszego serwera,
zobaczymy, że rzeczywiście został wyświetlone tutaj konsola zawierającej
informację, którą przesłaliśmy razem z zapytaniem.
Zatem struktura samego endpoint wygląda
tak, że po prostu przechwytuje dane i w tym przypadku pasujemy je w odpowiedni
sposób, a następnie zwracamy z pomocą obiektu.
Message Jest jest tutaj o tyle ciekawe, że
nie wymaga od nas tutaj ustawiania niczego dodatkowego ze względu na to, że jest w
stanie samodzielnie określić zwracały właśnie obiekt Jameson.
W przypadku pl url encoder sytuacja wygląda zdecydowanie prościej niż wyżej ze
względu na to, że po prostu sięgamy tutaj po dekorator do body, a następnie z
parametru body odczytujemy zawartość naszego zapytania.
Zatem jeżeli wrócimy teraz do Insomniac i
wykonamy zapytanie na ten adres, a następnie wybierzemy odpowiedni typ i
ustawimy właściwości, no to też chyba nie będzie dla Ciebie
zaskoczeniem, że dane zostaną przesłane w takiej oto formie.
Zwrócić tutaj uwagę, że możemy dodatkowo oznaczyć, czy chcemy przesyłać tekst w
formie pojedynczej linii, czy też wielu linii.
W takiej sytuacji możemy przesłać tekst, który zawiera białe znaki i w ten sposób
też odpowiednio może być zinterpretowany, przechowywany oraz zwracany do klienta.
Myślę, że ukośnik to znak, który warto
zapamiętać i w dalszej kolejności mamy formę data.
I tutaj sytuacja jest o tyle bardziej
złożona, że musimy wykorzystać dodatkowe dekorator o nazwie Form Data Request.
Taki dekorator pobieramy sobie z Nest jest Form Data i dzięki temu jesteśmy w stanie
odbierać tutaj pliki, które przesyłamy razem z zapytaniem.
Ponownie więc skopiuję sobie ten endpoint, a następnie wrócimy do
niego, gdzie musimy również zmienić typ naszego palladu na multiple i dzięki temu
tutaj pojawią się dodatkowe opcje takie jak fill.
Jeżeli teraz wybiorę sobie jakiś plik, no
to jak się być może domyślasz otrzymaliśmy tutaj dość ciekawą odpowiedź.
Mianowicie dzięki temu, że nasz plik
został odpowiednio spasowany, mamy tutaj do czynienia z obiektem, które uwzględnia
jego właściwą nazwę end, kodowanie, MIME type oraz tak zwany buffer, czyli nic
innego jak samą zawartość pliku zakodowaną w formie tablicę.
Coś takiego jesteśmy w stanie przykładowo
przesłać do przeglądarki i w ten sposób przykładowo plik może zostać pobrany.
Jednocześnie też po stronie backendu
możemy wykorzystać różnego rodzaju biblioteki do tego, aby manipulować np.
zdjęciami bądź też zawartością plików PDF.
W rezultacie jedyne co musisz wiedzieć na temat przesyłania informacji właśnie w
takiej formie jest fakt, że wykorzystanie tych dodatkowych dekoratorów czy też
bardziej specjalnych funkcji middleware, które umożliwiają transformację zapytania.
Jesteśmy w stanie wyciągać informacje o
tym pliku, które umożliwią nam jego identyfikację, walidację oraz poprawne
zapisanie na naszym dysku lub też ewentualnie przesyłanie dalej do klienta.
Oczywiście jeżeli chodzi o techniki pracy
z plikami jest ich zdecydowanie więcej i można temu poświęcić cały rozdział.
Jednak najważniejsze jest to, aby na ten
moment było dla Ciebie jasne, że do przesyłania plików wykorzystujemy pilot
typu Multiple Form Data, a następnie po stronie serwera otrzymujemy tutaj
spasowane informacje zawierające najważniejsze dane na temat pliku.
Pamiętaj tylko o tym, że w momencie, gdy
pliki trafiają do Twojej aplikacji, zanim umieścisz jej faktycznie na dysku, musisz
je odpowiednio zrealizować i upewnić się na różne sposoby.
Przykładowo o tym, że nie udają tego, czym faktycznie nie są.
Co dokładnie mam na myśli?
Myślę, że dowiesz się z kolejnych materiałów.
Natomiast na ten moment ta informacja o
zachowaniu bezpieczeństwa wydaje mi się, że jest wystarczająca.
A tymczasem, jeżeli chodzi o nasz ostatni format, czyli po prostu format, czyli
sytuacja jest tutaj bardzo prosta ze względu na to, że ponownie ustawiamy
odpowiedni typ danych i jesteśmy w stanie przekazać tutaj czysty obiekt,
który zostanie odebrany po stronie serwera i też zwrócony w odpowiedzi.
Jak widzisz, w tym przypadku nie mieliśmy do czynienia np.
z prasowaniem tego obiektu np.
ciągu znaków, ponieważ message jest poprawnie o to zadbał.
Jeżeli teraz w ramach podsumowania rzucisz tylko okiem jak łatwo jest przyjmować
informacje z pomocą podglądu, a następnie zwracać je z powrotem do klienta, to
zobaczysz, że naprawdę nie ma tutaj nic odkrywczego.
Oczywiście sytuacja komplikuje się w
momencie, gdy te informacje muszą zostać przetransportowane zapisane w bazie
danych, bądź też nawet zapisane na dysku, a potem nawet zwracane do klienta.
Do tego wszystkiego jednak będziemy sobie jeszcze wracać.
Natomiast na ten moment myślę, że całkiem
dobrym pomysłem jest to, abyśmy zakończyli tę lekcję i przeszli do kolejnych.
Dzięki za uwagę i do usłyszenia za chwilę.