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.
Kolejny bardzo popularny rodzaj
uwierzytelnienia połączenia to po prostu wykorzystanie klucza API.
Tutaj również pokażę Ci prosty przykład implementacji takiego mechanizmu.
Zasadniczo w tym przypadku powinniśmy wykorzystać już bazę danych oraz możliwość
przechowywania informacji zarówno na temat użytkowników oraz samych kluczy.
Natomiast tak naprawdę po prostu chciałbym
pokazać Ci przykład jak może to zostać zrealizowane w przypadku NEWS czy jest.
Mianowicie jedyne co musimy zrobić to
wykorzystanie ponownie ponownie guarda, w przypadku którego wykorzystamy.
Mechanizmem Nest jest do tego, aby odczytać zawartość zapytania HTTP, które
zostało przesłane do naszej aplikacji i w tym przypadku odczytujemy zawartość
nagłówka XXX i następnie porównujemy jego zawartość bezpośrednio z ciągiem znaków 1,
2, 3, 4, 5, 6, który stanowi nasz klucz API.
Naturalnie w tym przypadku, w momencie,
gdy mielibyśmy do czynienia z kontami użytkowników, musielibyśmy w pierwszej
kolejności pobrać klucz API przypisany do danego użytkownika i w tym miejscu
porównać go z tym, który został przesłany razem z zapytaniem.
Nie będę jednak tego robił w tym momencie
ze względu na to, że dokładnie tym zajmiemy się w kolejnej lekcji.
W związku z tym nie będziemy się już tutaj dublować.
Najważniejsze jest jednak to, aby było dla
Ciebie jasne, że jeżeli chodzi o sposób uwierzytelnienia połączenia za pomocą
klucza API, jedyne co musimy zrobić, to po prostu odczytać ten klucz API z naszego
nagłówka, a następnie porównać go z kluczem API użytkownika.
No i oczywiście w momencie, gdy nasz endpoint będzie zabezpieczony tym gestem,
to w momencie uruchomienia naszego serwera, a następnie przesłania zapytania
otrzymamy odpowiedź 200 i tym samym też dostęp do samego endpoint.
W momencie gdy tego nagłówka zabraknie
bądź jego zawartość nie będzie prawidłowa, otrzymamy błąd w tym przypadku 403
informujący o braku dostępu do tego zasobu.
Ten błąd 403 wynika z domyślnego
zachowania Garda, ale oczywiście możesz to kontrolować poprzez zapisanie tutaj EFS, w
przypadku którego zwracamy na auto Exception.
W momencie gdy klucz API się nie zgadza, a
w momencie gdy wszystko jest w porządku zwracamy wartość true lub ewentualnie
dodatkowo modyfikujemy zawartość obiektu Request.
Do tego, aby przypisać do niego obiekt użytkownika.
W rezultacie w tym miejscu możemy zamiast odwoływać się do serwisu, po prostu pobrać
sobie obiekt żądania, a następnie zwrócić informację na temat użytkownika.
Efekt będzie taki, że w momencie, gdy odwołamy się teraz do tego endpoint
ponownie powinniśmy w przypadku braku klucza API otrzymać status 401.
I to dokładnie się dzieje, a w momencie gdy uzupełnimy nasz klucz API tak aby był
poprawny, otrzymamy informacje na temat naszego użytkownika.
Swoją drogą technika polegająca na tym, że nasz obiekt żądania zostaje zmodyfikowany
w taki sposób, aby dodatkowo uwzględniał informacje na temat bieżącego użytkownika,
jest techniką niesamowicie przydatną ze względu na to, że wewnątrz kontrolera
bardzo często musimy odwołać się właśnie do informacji dotyczących użytkownika i
tym samym nie musimy za każdym razem o nie pytać.
Po prostu na etapie garda zostają one dołączone do naszego zapytania.
Myślę, że jest to już dla Ciebie jasne.
W jaki sposób możesz zabezpieczać swoje ścieżki z wykorzystaniem klucza API.
Aczkolwiek tutaj należy uwzględnić jeszcze takie drobne elementy jak np.
sposoby przechowywania tych kluczy API wewnątrz bazy.
Przede wszystkim takie klucze raczej nie powinny być przechowywane w formie jawnej.
Oznacza to, że w momencie ich wygenerowania użytkownik powinien je
otrzymać, ale tylko raz, a potem do naszej bazy powinny trafić w formie zachowanej.
Oznacza to, że jedynym sposobem odzyskania
danego klucza będzie jego ponowne wygenerowanie.
Z takim mechanizmem może spotkać się bardzo często, np.
w usłudze Send Grid, ale np.
w usłudze Maile
masz jeden stały klucz, który zawsze wyświetlany jest w Twoim koncie.
Oznacza to, że jak widzisz sposoby przechowywania kluczy różnią się od siebie
i tym samym też to od siebie oraz poziomu zabezpieczeń Twojej aplikacji
zależy to, w jaki sposób będziesz te klucze przechowywać.
Podobnie też, jeżeli będziesz mieć
potrzebę, aby użytkownik posiadał więcej niż jeden klucz, to również na etapie tej
logiki musisz uwzględnić to, że może istnieć taka ewentualność.
Temu wszystkiemu na pewnym poziomie będziemy się jeszcze przyglądać, a
tymczasem zapraszam Cię do kolejnej lekcji.