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 omówimy sobie kilka wątków dotyczących praktycznej pracy z bazami
danych i rzeczy, na które musisz zwrócić uwagę jako full stack.
Pierwsza to tak w zasadzie wskazówka
mówiąca o tym, że jeżeli pracujesz ze składowymi bazami danych i rozwijasz
projekt na jego początkowym etapie, bądź też po prostu potrzebujesz coś szybko
sprawdzić, to myślę, że warto rozważyć sięgnięcie po SQLite.
Jest to specjalny rodzaj bazy danych,
który zapisuje wszystkie informacje w pliku.
W związku z tym oczywiście nie jest tak
wydajny, ani też nie ma możliwości, które umożliwiają jego dalsze skalowanie, ale na
potrzeby szybkich testów i mniejszych aplikacji w zupełności wystarcza.
Drugą, na które warto zwrócić uwagę w przypadku baz to zdecydowanie Fire Base.
Tutaj również możesz niesamowicie szybko
się połączyć i zacząć testować swoją aplikację jednocześnie.
Jeżeli zajdzie potrzeba jej dalszego
skalowania, to w tym przypadku nie będzie z tym większego problemu.
W poprzednich lekcjach pokazywałem również
usługę Railway, która też świetnie mi się sprawdza na potrzeby mniejszych projektów
i szybkiej konieczności ustawienia zdalnej bazy danych.
Kolejnym elementem, które musisz brać pod uwagę są emigracja oraz side.
Tutaj w zależności od bazy danych oraz
zestawu narzędzi, które wybierzesz, te mechanizmy będą się od siebie różnić.
Ważne jest tylko to, aby na temat migracji i celów wiedzieć tyle, że ich rolą jest
przede wszystkim utrzymanie odpowiedniej struktury bazy.
Na przestrzeni np.
wielu członków zespołu bądź też wielu serwerów produkcyjnych.
Jeżeli chodzi o migrację, to jest to system umożliwiający wprowadzanie zmian do
struktury bazy danych i zachowywanie ich odpowiedniej historii.
Przykładowo, jeżeli potrzebujesz dodać nową tabelę bądź zmodyfikować istniejącą,
tworzysz plik migracji, w której opisujesz tę zmianę.
Następnie na serwerze produkcyjnym bądź developerskim uruchamiasz migrację i tym
samym sprawiasz, że zmiany pojawiają się w bazie.
Co więcej, w przypadku wielu narzędzi istnieje opcja również cofnięcia migracji.
Oznacza to, że jeżeli zrobisz deployment aplikacji i z jakiegoś powodu okaże się,
że musi zostać wycofane, to zamiast odwracać zmianę na piechotę,
możesz po prostu wykonać cofnięcie ostatniej migracji.
Jeżeli chodzi o side, to ich zastosowanie
jest głównie wykorzystywane na potrzeby developmentu i konkretnie polega to na
tym, że w momencie gdy konfigurujesz nowy projekt bądź resetuje już bazę, to ręczne
dodawanie informacji do tej bazy danych jest naprawdę wielką stratą czasu.
Z tego powodu zdecydowanie dobrze jest przygotować sobie pliki migracji, które
możesz uruchomić w momencie resetowania bazę.
Oznacza to mniej więcej tyle, że jeżeli
chcesz odświeżyć swoją deweloperską bazę, wystarczy, że na przykład ją usuniesz, a
następnie uruchomić migrację i w ten sposób stworzysz całą strukturę z
uwzględnieniem wszystkich wprowadzanych zmian, a następnie uruchomi Sebek.
Tutaj wypełnią ją przykładowymi danymi.
Następnym tematem, o którym chciałbym
powiedzieć kilka słów jest lokalny development.
Tutaj zarówno lokalne jak i produkcyjne development różni się od siebie chociażby
ze względu na to, że w przypadku naszej lokalnej bazy możemy z nią robić w
zasadzie cokolwiek na potrzeby rozwoju aplikacji i różnego rodzaju testów.
Oznacza to, że dobrze jest skonfigurować sobie np.
Dockera bądź też serwer MongoDB MSSQL
bezpośrednio na naszym komputerze i mieć do niego stały dostęp.
Przykładowo tutaj wykorzystuję narzędzie
Table class, o którym również zdarzyło mi się wspomnieć.
Tutaj mam skonfigurowane połączenie z moją
lokalną bazą MongoDB, w przypadku której jak widzisz podaję tutaj tylko jej adres.
Następnie te połączenie mogę przetestować
i oczywiście połączyć się z nią w momencie gdy już wybiorę bazę.
Wewnątrz niej znajdują się kolekcje oraz utworzone dokumenty.
Dzięki temu jestem w stanie wchodzić z nią
w interakcje poprzez dodawanie nowych rekordów bądź edycję istniejących.
Oczywiście w przypadku serwera produkcyjnego teoretycznie również można
tak zrobić, aczkolwiek szczerze mówiąc pod wieloma względami nie jest to bezpieczne.
Po pierwsze, jeżeli już masz konieczność
połączenia się zdalnie z produkcyjną bazą, upewnij się, że to połączenie jest na tyle
zabezpieczone, aby nie dało się go nawiązać np.
spoza sieci firmowej bądź bezpośrednio spoza Twojej sieci.
Następnie też musisz pamiętać o
bezpiecznym przechowywaniu haseł, a już najlepiej utworzyć sobie nowego
użytkownika, który będzie różnił się od tego, który wykorzystywany jest wewnątrz
aplikacji i będzie posiadał specjalne, ograniczone prawa.
Znacznie lepszym pomysłem w kontekście dostania się do produkcyjnej bazy danych
jest po prostu wykorzystanie terminala w celu nawiązania bezpiecznego połączenia z
serwerem i tam dopiero za pomocą zera i wykonywania jakiejś operacji.
Jednocześnie pamiętaj, że wtedy to jest praca na żywym organizmie i w takiej
sytuacji każda pomyłka może Cię dużo kosztować.
Nie zmienia to jednak faktu, że ten cały
temat Remote Access musisz brać bardzo na poważnie ze względu na to, że jeżeli go
odblokujesz, to może z niego skorzystać również ktoś niepożądany.
I ponownie zwracam uwagę na fakt, aby.
Dostęp do bazy poprzez np.
uprawnienia read only, bądź też najlepiej
w ogóle unikać udostępniania bezpośredniego dostępu do bazy.
Oczywiście tutaj bardziej doświadczeni
użytkownicy mogą sobie z tym poradzić, aczkolwiek np.
udostępnienie bazy osobie z marketingu,
która po prostu wykonuje na niej kilka poleceń jest raczej kiepskim pomysłem.
Zdecydowanie lepiej w takiej sytuacji jest wykorzystać np.
TDT, które również jak widzisz nagrałem
tutaj film i z jego pomocą przygotować dashboard umożliwiający dostęp do
informacji zawartych również w produkcyjnej bazie.
Oczywiście w niektórych przypadkach może
zajść potrzeba, aby skorzystać z alternatywy, dla której będziesz w stanie
skonfigurować na swoim serwerze, aczkolwiek też pamiętaj o tym, że Repsol
również posiada taką wersję, którą możesz uruchomić u siebie.
Kolejnym wątkiem jest Reply, o którym
również zdarzało mi się mówić, czyli jest to specjalne narzędzie CL, które umożliwia
połączenie się z naszą aplikacją i wykonywanie na niej różnego rodzaju akcji,
w tym tych uwzględniających dostęp do bazy danych.
Tutaj np. w przypadku technologii PHP mamy do
dyspozycji narzędzie, którego naprawdę brakuje mi w przypadku środowiska.
No dobrze, jest. Jednocześnie też jest to dość ciekawy
przypadek wykorzystania narzędzia do tego, aby właśnie wchodzić w interakcję z
aplikacją, bez konieczności bezpośredniego podłączania się do bazy.
No i ostatnim już na liście, ale z pewnością najważniejszym procesem, o które
musisz zadbać jest przeprowadzanie regularnych backupów Twojej bazy.
I najlepiej jest, aby przygotować sobie
nie tylko politykę backupu, ale też opanować dobrze proces przywracania
aplikacji w sytuacji, gdy jest to konieczne.
Po prostu wielokrotnie spotkałem się z sytuacjami, w których backupy oczywiście
są skonfigurowane, ale nikt nie jest w stanie szybko z nich skorzystać.
W związku z tym proponuję wziąć to wszystko pod uwagę w momencie, gdy
pracujesz z bazami danych i oczywiście większość z tych wątków będziemy omawiać.
Po prostu na ten moment bardzo zależy mi
na tym, aby było dla Ciebie jasne, w jaki sposób w ogóle podchodzić do baz danych,
ponieważ niewykluczone, że jest to dla Ciebie nowy temat.
To teraz myślę, że warto, aby
przeprowadzić się przez to, jak to może wyglądać w praktyce.
Oczywiście nie mam możliwości pokazania Ci
moich produkcyjnych projektów, ale na potrzeby tego przykładu skonfigurowałem
Nest, że jest połączenie przechodząc po prostu przez artykuł z dokumentacji.
Efekt końcowy jest taki, że faktycznie mamy tutaj działający serwer aplikacji,
która posiada jedną akcję tworzącą użytkownika, a tak naprawdę jest tylko
dobranymi danymi I tak naprawdę w tym momencie po prostu tutaj mamy metodę,
której zadaniem jest wykorzystanie do utworzenia nowego rekordu.
Jeżeli chodzi o połączenie jest to
połączenie lokalne zdefiniowane w pliku DOP i NB.
W tym przypadku w zupełności wystarczy jedynie adres bazy danych z uwzględnieniem
tutaj, jej nazwę oraz kilkoma dodatkowymi parametrami.
W momencie gdy przejdziemy sobie w
przeglądarce na adres localhost 3000 to zobaczymy, że mamy tutaj obiekt
użytkownika z informacjami, które tak jak powiedziałem zostały zakodowane.
Co więcej, jeżeli teraz przejdziemy do
lokalnej bazy, to zobaczymy, że faktycznie tutaj pojawił się ten nowy dokument.
Oznacza to, że właśnie wykorzystując tabelę class mam możliwość wchodzenia w
interakcję z danymi, które powstają w wyniku działania mojej lokalnej aplikacji.
Jest to niezwykle przydatne na etapie
developmentu, aby właśnie poukładać sobie tuning, który umożliwia np.
usunięcie informacji z bazy bez
konieczności pisania jakichś dodatkowych metod.
Jednocześnie miej proszę na uwadze fakt,
że przykładowo w tym miejscu mamy nic innego jak połączenie ze zdalną bazą.
I tutaj zwróćcie uwagę, że table class umożliwia mi dodanie konkretnych etykiet.
Dzięki temu jestem w stanie szybko
rozróżnić czy aktualnie znajduje się na deweloperskiej czy produkcyjnej bazie.
Z tego powodu miej proszę zawsze na uwadze fakt, że w momencie gdy korzystasz z
narzędzi takich jak table class i wprowadzasz zmiany do bazy i jednocześnie
gdzieś tam masz skonfigurowane połączenie z produkcyjną bazą, to zawsze upewnij się
5 razy, że modyfikuje już dane na lokalnej, a nie produkcyjnej bazie.
No i teraz jeżeli chodzi o tą produkcyjną bazę to w moim przypadku jest to właśnie
Railway, w przypadku którego po prostu pobrałem sobie dane połączenia i
analogicznie jak pokazywałem Ci przed chwilą.
W momencie tworzenia.
Połączenia wykorzystuje tylko ten adres do tego aby połączyć.
Się z bazą, którą mamy tutaj.
Poza tym jak widzisz akurat w przypadku
Railway, aczkolwiek tak samo jest w przypadku Feedback, mam możliwość
edytowania danych w produkcyjnej bazie z poziomu mojej przeglądarki.
Oczywiście takie narzędzia nie są czymś nowym ze względu na to, że np.
w przypadku Majewski również mamy
narzędzia, które możemy zainstalować na produkcyjnym serwerze, aby umożliwić
dostęp właśnie w takiej webowej, wizualnej formie.
Ostatnim wątkiem, na które chciałbym
zwrócić Twoją uwagę jest fakt, że w momencie gdy przyjdzie Ci konfigurować
własne serwery to oczywiście tak jak zwykle zaznaczam w większości przypadków.
Korzystamy z zewnętrznych usług osób,
które są w stanie skonfigurować mi te najważniejsze ustawienia.
Ale jeżeli np.
na potrzeby developmentu potrzebuje przejść przez jakiś proces, to najlepszym
źródłem informacji na temat konfiguracji serwerów jest sekcja Community na Digital
Option, gdzie poziom materiałów oraz tutoriali jest po prostu niesamowite.
Zatem bardzo polecam Ci to źródło.
No i oczywiście, aby mieć na uwadze
wszystkie wymienione tutaj wątki, naprawdę warto zadbać o to, aby lokalny development
był wygodny, a baza danych produkcyjna odpowiednio zabezpieczona i też
uwzględniając w tym backupy oraz procesy ich przywracania.
W tym momencie na temat pracy z bazami danych to byłoby już na tyle.
Oczywiście praktyka jeszcze przed nami.
Dzięki za uwagę i do usłyszenia za chwilę.