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 momencie, gdy będziesz projektować bądź.
Nawet pracować z bazami danych,
niewykluczone, że spotkasz kilka powtarzających się problemów.
Z tego powodu zebrałem całą listę
problemów, z którymi ja sam się spotykałem.
A nawet pewnych błędów, które ja sam popełniałem bądź miałem.
Do czynienia z ich konsekwencjami. Jednym z takich.
Fundamentalnych problemów, które.
Można spotkać w bazach danych jest nie wykorzystywanie.
Typów. Tak jak już mówiłem, każda kolumna w danej
tabeli czy właściwość w dokumencie powinny mieć.
Przypisany typ oraz dodane ograniczenia, takie jak np.
maksymalna. Długość.
Jednocześnie musisz wiedzieć, że takie ograniczenia.
Narzucane są na etapie projektowania
struktury bazy oraz na etapie projektowania z.
Kimś bądź modeli.
Mianowicie przykładowo mamy tutaj. Dokumentację.
PRISM, gdzie możemy spotkać dokładnie modele, wewnątrz których.
Określamy dostępne pola.
I jak widzisz zaznaczamy.
Nie tylko ich typ, ale również dodatkowe
właściwości, takie jak chociażby domyślne pola.
Czy np. określenie, że w przypadku użytkowników.
E-mail musi być unikatowe.
Teoretycznie przecież nic nie stoi na.
Przeszkodzie, aby w momencie rejestrowania użytkowników.
Po prostu dbać. O to, aby nie.
Umożliwić rejestracji na ten sam. Email.
Jednocześnie z różnych powodów może zdarzyć się tak, że.
Pojawi.
Się sposób dodawania użytkowników w Twojej aplikacji, w.
Której nie będzie to weryfikowane.
Wtedy taka sytuacja powinna być
przechwycona bezpośrednio przez silnik bazodanowy.
Który nie dopuści do dodania rekordu, który.
Nie pasuje do tych ograniczeń. Z tego.
Powodu miej.
Na uwadze fakt, że zarówno w przypadku SQL.
Owych, jak i nowa SQL owych baz danych musisz dokładnie określić to, jak będzie
wyglądał model oraz jakie właściwości będzie posiadać.
Dodatkowo, w przypadku gdy zajdzie potrzeba, aby pomiędzy tabelami.
Bądź. Kolekcjami istniały jakieś powiązania, to.
One.
Również zwykle opisywane są na etapie dema, czyli w tym przypadku Object.
Bądź ewentualnie. Primy.
Zwróć uwagę, że mamy tutaj post, a następnie mamy autora, w przypadku którego
wyraźnie jest zaznaczona relacja oraz sposób powiązania tych pól.
Konkretnie tutaj mamy informację o tym, że wewnątrz posta znajduje.
Się autor ID.
Który jest Integer
wskazujący na identyfikator pochodzący z modelu User, a konkretnie z kolumny ID.
Jeżeli chodzi o.
Relacje, tutaj również potrzebujesz trochę praktyki.
Aby odnaleźć się w tych regułach definiowania.
Powiązań. Natomiast na koniec dnia jest to
stosunkowo proste i przede wszystkim intuicyjne.
Kolejnym błędem poza brakiem typów czy też
w ogóle ich nie określania jest ich niewłaściwe określenie.
Przykładowo dobrze jest określać typ
kolumny i narzucać na nią określone ograniczenia, takie jak np.
długość znaków.
Ale jednocześnie w momencie, gdy próbujemy być tutaj zbyt kreatywni, może dojść.
Do sytuacji, w której.
Na rzucimy ograniczenie, które w.
Niektórych sytuacjach może okazać się zbyt.
Duże i doprowadzić do błędów.
No bo teoretycznie sytuacja, w której ktoś
ma adres e-mail dłuższy niż 64 znaki raczej zdarza się dość rzadko, aczkolwiek
nie można powiedzieć, że taka sytuacja nie jest możliwa.
W momencie, gdy do niej dojdzie.
Nasza aplikacja nie umożliwi np.
zarejestrowania takiego.
Konta, a to będzie wymagało.
Od nas wprowadzania dodatkowych zmian.
Oczywiście muszę tutaj zaznaczyć, że ten
przykład jest tylko pokazowy, ale takich błędów dotyczących nieprawidłowego.
Określenia typu bądź jakichś ograniczeń. Jest naprawdę.
Dużo i łatwo się na nie natknąć.
Kolejnym rodzajem błędów jest niewłaściwa bądź całkowity brak normalizacji.
Inaczej mówiąc, nasza baza zaprojektowana jest tak, że.
Wiele danych powtarza się.
Na przestrzeni tych samych. Tabel, bądź.
Też co gorsza, występują w wielu różnych miejscach.
I to niesamowicie utrudnia pracę z nimi oraz np.
aktualizowanie.
No bo dla przykładu, jeżeli mamy tutaj
użytkowników, do których przypisane są tagi.
Teoretycznie wszystko jest w porządku, ale po pierwsze za każdym razem, gdy.
Będziemy chcieli wyświetlić te tagi, no to mamy.
Problem z dostępem do każdego z nich.
Ze względu na to, że znajdują się one w
jednej kolumnie, a dodatkowo są oddzielone przecinkami.
Oznacza to, że za każdym razem.
Gdy będziemy chcieli je pobrać, będziemy
musieli je podzielić i to samo będziemy musieli.
Zastosować. W momencie, gdy będziemy dodawać nowy.
Tak. Coś takiego nie ma najmniejszego sensu.
W związku z tym. Zdecydowanie lepiej.
Jest wykorzystać.
Dodatkową tabelę. Poza tym np.
w momencie, gdy w jakimś tagu.
Pojawi się literówka, bądź też zajdzie potrzeba jego zmiany.
W tej konkretnej sytuacji wykonanie takiej operacji jest naprawdę bardzo złożone.
Z tego powodu warto zadbać.
O to, aby dane w naszej bazie nie powtarzały się, aczkolwiek ta reguła.
Nie ma aż takiego zastosowania w przypadku relacyjnych.
Baz danych, gdzie ewentualne.
Powtórzenia są nieco bardziej.
Dopuszczalne, aczkolwiek również trzeba wziąć pod uwagę np.
możliwość globalnego.
Aktualizowania jakiś informacji.
I teraz następnym problemem, z którym
również bardzo często się spotykam jest brak spójności oraz brak indeksów.
O indeksach już mówiłem, że w przypadku każdej z tabel warto je stosować.
Natomiast jeżeli chodzi o spójność.
Mam tutaj na myśli takie elementy jak chociażby.
Wielkie i małe. Litery w nazwach, stosowanie polskiego czy
angielskiego lub też nawet wykorzystywanie liczby mnogiej oraz pojedynczej.
W moim przypadku. Stosuje się raczej do ogólnie przyjętych
konwencji, które narzucane są przez technologię, z której aktualnie korzystam,
albo po prostu są spójne z przyjętą konwencją w ramach danego.
Projektu.
Ogólną zasadą jest tutaj to, że istnieją oczywiście różne strategie nazewnictwa
oraz organizacji informacji w bazach danych.
Natomiast według. Mnie.
Bez większego ocenienia, która z technik
jest lepsza, która gorsza, warto po prostu zdecydować.
Się na jedną i bardzo się jej trzymać.
Naturalnie w niektórych przypadkach będą konieczne jakieś odstępstwa.
Natomiast co do zasady brak spójności
bardzo utrudnia późniejszą pracę z takim projektem.
No i teraz ostatnim, aczkolwiek chyba
najtrudniejsze do uniknięcia wątkiem są różnego rodzaju błędne decyzje projektowe.
Mianowicie wyobraźmy sobie sytuację, w
której mamy użytkowników oraz mamy jakieś społeczności.
Następnie ci użytkownicy mogą tworzyć
grupy, więc występuje tutaj powiązanie pomiędzy tabelą groups i users.
Teoretycznie nie ma w tym nic złego, w końcu to użytkownicy tworzą grupę.
Jednocześnie te grupy występują w ramach społeczności.
Oznacza to, że jeżeli jakaś społeczność
przypisana jest do wybranej grupy, która to została utworzona przez konkretnego
użytkownika, to teoretycznie może dojść do sytuacji, w której użytkownik usuwa konto,
a wraz z nim kaskadowo mogą być usunięte wszystkie powiązane z nim grupy i tym
samym wszystkie powiązane z tymi grupami społeczności.
Jest to bez wątpienia bardzo zła decyzja
projektowa, którą pozornie można bardzo łatwo naprawić.
Mianowicie, jeżeli użytkownicy będą mieć
możliwość tworzenia grup, to przede wszystkim możemy.
W ogóle. Nie uwzględniać informacji o tym, kto daną
grupę utworzył i po prostu przypisać ją do społeczności, bądź też na etapie
projektowania bazy danych zaznaczyć, że pole User ID może być NULL.
I tym samym w momencie gdy usuniemy.
Użytkownika i zniknie nam pole User.
ID, to nadal w.
Takiej sytuacji grupa zostaje i tym samym też powiązana z nią społeczność.
Pomińmy już tutaj fakt, czy takie
powiązanie w ogóle ma sens, natomiast chodzi mi tutaj o to, że należy
przewidywać różne możliwe sytuacje i również te związane np.
z usuwaniem informacji z bazy, bądź też jakiegoś rodzaju ich modyfikacjami.
Tak jak powiedziałem, unikanie.
Takich problemów jest niemal niemożliwe i przede wszystkim wynika z naszego
doświadczenia oraz tego, jak dobrze znamy kontekst biznesowy.
No bo na tej podstawie będziemy.
Projektować struktury, które będą funkcjonować w naszej aplikacji.
Oczywiście sam fakt tego.
Że trudno jest uniknąć tego rodzaju błędów, nie.
Upoważnia nas do. Tego, aby ich unikać.
Tym bardziej powinniśmy poświęcić
wystarczająco dużo uwagi, aby zminimalizować ryzyko ich wystąpienia.
Ze względu na to, że jeżeli wyobrazisz sobie, że mamy tutaj np.
100 tysięcy użytkowników. I kilkanaście.
Tysięcy grup i kilka społeczności, to w niektórych sytuacjach wprowadzenie
jakiejkolwiek zmiany w architekturze może stanowić dość duże wyzwanie.
Zatem jeżeli.
Chodzi o takie najczęściej popełniane błędy w kontekście projektowania baz
danych, to by było na tyle, jeżeli chodzi o tę.
Najważniejszą listę. Pamiętaj oczywiście.
Że te wszystkie wątki znacząco mogą się
rozwijać i różnić w zależności od wybranej bazy danych oraz zestawu technologii,
które wykorzystasz do projektowania swojej aplikacji.
Natomiast ogólne zasady dotyczące typów normalizacji, spójności oraz podejmowania.
Mądrych decyzji projektowych wydaje mi się.
Że są wspólne dla każdego rodzaju projektu.
I tutaj jeszcze na koniec odsyłam.
Cię do artykułu na blogu technologii MongoDB.
Gdzie możesz przeczytać o wzorcach projektowania bazy.
Danych opartej o MongoDB.
Mianowicie masz tutaj nie tylko.
Listę wzorców oraz ich zalet oraz wad, ale
też sytuacje, w których mogą Ci się konkretnie sprawdzić.
Mogę tutaj tylko powiedzieć, że stopniowe rozszerzanie swojej wiedzy na temat
projektowania baz danych i wykorzystywania różnego rodzaju technik z pewnością jest
tutaj dobrym pomysłem ze względu na to, że nawet jeżeli.
Nie będziesz w sytuacji, gdzie będziesz.
Projektować jakąś aplikację od całkowitych
podstaw, tak jednocześnie znajomość tych wszystkich wzorców pomoże Ci w ich.
Rozwoju i ewentualnie unikania jakiś
przyszłych błędów, z których w danej chwili.
Nikt nie zdaje sobie sprawę. No i w tym.
Momencie zbliżyliśmy się już do końca tej lekcji.
Więc dziękuję Ci za uwagę. I zapraszam do.
Kolejnej.