Jak działają strony i aplikacje
1 godz. 24 min · Biznes i Automatyzacje
Grzegorz RógIdea ArchitectCzy ja naprawdę muszę to wiedzieć? Czy to ważne, co dzieje się po wpisaniu adresu w przeglądarce, jak on jest skonstruowany i co zawiera? Wbrew pozorom - bardzo! Wiedza o tym, jak przeglądarka interpretuje to, co do niej wpisujemy przyda Ci się w wielu aspektach, nie tylko w programowaniu. Dzięki temu zrozumiesz jak serwer wymienia informacje z przeglądarką, jak działają UTMy w marketingowych kampaniach, czy wyszukiwarka, z której możesz przechwycić informacje w Analytics. Poznasz też kilka pojęć związanych z konsolą i parę przydatnych komend.
Porozmawiamy o tym, jak komunikować się efektywnie z serwerem, jakie są typy zapytań i jak możemy je egzekwować. Przy okazji poznasz aplikację Postman, z której będziesz mógł wygodnie wysyłać zapytania do serwera i przeglądać odpowiedzi. Jest to program, bez którego współczesny web development byłby bardzo utrudniony a komunikacja z back-endem dużo trudniejsza w implementacji.
Jak są zapisywane dane sesji, jakie dane przechowuje przeglądarka i po co? Odpowiedzi na te pytania pomogą Ci uniknąć frustracji w przypadku, gdy dane zostaną niepotrzebnie scache'owane ale także dowiedzieć się, jak zoptymalizować zasoby na stronie, które mogą być serwowane szybciej dla użytkownika. Zobaczysz, jak wygląda proces tworzenia ciasteczek, poznasz pojęcia jak Session Storage i Local Storage, to wszystko na kilku praktycznych przykładach.
W kursie przyjrzymy się szczegółowo działaniu API, poznasz podstawowe koncepcje, które stoją za najbardziej popularną metodą komunikacji z back-endem w nowoczesnych aplikacjach. Pomówimy o formacie JSON, będziemy też wysyłać zapytania do API takich aplikacji jak Twitter czy Google. W ten sposób dowiesz się, jak działają mechanizmy, które pozwolą Ci zintegrować się z najpopularniejszymi narzędziami w sieci!
Z kursem powinien zapoznać się z nim każdy, kto planuje tworzyć strony internetowe i chce rozwijać swoją karierę w ścieżkach webdevelopmentu. Jest to podstawowy materiał, który co prawda nie wchodzi w szczegóły jak sama konstrukcja API czy tworznie Rest API, ale jest uniwersalnym fundamentem wiedzy do różnych ścieżek. Przyda się też twórcom i właścicielom internetowych projektów, którym pozwoli lepiej zrozumieć mechanizmy działające pod maską webowych stron i aplikacji po to, aby je rozwijać czy korzystać z automatyzacji.
Cześć! Wiesz już naprawdę dużo o tym, jak
działają API i jak działa komunikacja klient serwer.
Można więc powiedzieć, że Twoją wcześniejszą wiedzę powinieneś teraz
zastąpić tym, że w momencie kiedy wysyłasz jakieś zapytanie z przeglądarki np.
paska adresu, to tak naprawdę najpierw ona
komunikuje się z API po to, żeby z serwera zwrócić Ci odpowiednie dane dopasowane np.
do Twojego statusu po zalogowaniu, po to,
żeby wyświetlić przykładowo ostatnio oglądane filmy na Netflixie i dopiero wtedy te dane w
ramach strony internetowej są serwowane dla Ciebie w przeglądarce.
Netflix to całkiem niezły przykład, bo ma aplikacje mobilne chyba na wszystkie
platformy i urządzenia, włącznie z PlayStation, Xboxami itd.
i to wszystko korzysta z jednego API i musi Ci
wyświetlić te filmy, które ostatnio oglądałeś
a nawet Netflix potrafi zapamiętać progres, czyli Twój postęp,
to gdzie skończyłeś oglądać. To wszystko dzieje się przez API i te informacje do
dowolnej aplikacji przez API są dostarczane.
Teraz skoncentrujmy się na tym, jak
technicznie działa i wygląda wymiana tych informacji.
Weź np. Ubera.
W momencie kiedy zamawiasz taksówkę, dostajesz od razu informację o tym, w
którym miejscu jest określony kierowca, który do Ciebie jedzie.
No i teraz z punktu widzenia klienta w
schemacie, w którym omówiliśmy wygląda to tak, że co jakiś czas Twój telefon musi
wysyłać zapytanie do Ubera, gdzie jest aktualnie taksówka, na jakich koordynatach
Latitude i Longitude i wtedy na mapę jest noszona jego aktualna pozycja.
Wygląda to tak jakby do Ciebie jechał, ale
trzeba co chwilę odpytywać serwer o pozycję kierowcy.
Czyli ten czas jest ustawiony np.
nie wiem co 10 czy co 5 sekund i wtedy ta
pozycja na mapie jest aktualizowana, bo wysyłasz request, dostajesz odpowiedź o
nowych koordynatach, jest to nanoszone na aplikację.
Jednak jak możesz sobie wyobrażać taki przebieg,
taka sytuacja nie jest zbyt korzystna, bo np.
jeżeli taksówkarz zatrzyma się na
skrzyżowaniu na minutę, to tak naprawdę odpytuje mamy o to samo położenie,
tymczasem generujemy ruch serwerowy. Czyli zapytaliśmy co 5 sekund np.
kilkadziesiąt razy i ciągle dostajemy od serwera tą samą odpowiedź.
Oczywiście w przypadku małych aplikacji
nie ma to jakiegoś wielkiego znaczenia. Ale jeśli mówimy o Uberze ma ogromne
znaczenie i przekłada się znacząco na koszt pracy tego serwera, na koszt
wykonywania tej aplikacji po stronie serwera.
Dlatego poza tym standardowym schematem
klient wysyła zapytanie i dostaje odpowiedź, który nazywamy tzw.
Poolingiem to jest od Pool.
Jeżeli miałbym Ci to wytłumaczyć na
jeszcze jednym przykładzie, to w standardowym schemacie Poolingu mamy coś
takiego, gdzie klient wysyła do serwera informację np.
jeśli zamawiamy pizzę to powiedzmy podaj
mi informację z pomocą GET o zamówieniu numer 5 i serwer odpowiada mi statusem np.
zamówiono.
Za chwilę go pytam znowu z aplikacji i klikam sobie guzik np.
sprawdź status i pytam znowu daj mi informację o tym zamówieniu 5,
serwer powie mi w tym momencie OK,
teraz status to jest w trakcie pieczenia.
Później zapytam go jeszcze raz i
powiedzmy, że serwer odpowie mi w dostawie.
Tyle, że po drodze mogę wykonać 1000
zapytań, na które serwer odpowie mi tak samo.
Więc mamy drugi schemat, który nazywany
jest Long Pooling i polega on na tym, że ja jako klient wciskam ten guzik
zaktualizuj informacje o moim zamówieniu i
po prostu wysyłam GET do serwera np. informację pod tam endpoint Order 5, który
złożyłem i teraz serwer czeka sobie na zmianę.
Czeka, czeka, czeka.
W momencie kiedy pizza się upiecze to
dopiero wtedy wysyła mi status z informacją, że jest ona w dostawie,
czy zmieniła właśnie status.
Oprócz tego Pooling i Long Pooling
jest jeszcze jeden bardzo ciekawy schemat, który często się wykorzystuje.
Są to tzw. Webhooks.
Webhooks to bardzo ciekawa konstrukcja, która można powiedzieć w pewnym
uproszczeniu, że sprawia, że sam klient staje się też serwerem.
No bo problem serwera polega na tym, że on tak naprawdę nie za bardzo wie kto jest
klientem i musi dostawać te pytania po to, żeby mógł na nie odpowiadać.
Zauważ, że w każdym tym pytaniu musi
być ta autoryzacja, ten nagłówek autoryzacyjny, razem z kodem sekretnym itd.
I jakby tu każde zapytanie z uwagi na to co Ci powiedziałem o protokole HTTP, że on zapomina,
jest unikalne i serwer musi na nie odpowiadać.
I teraz w związku z takim schematem mamy
sytuację, w której serwer tak naprawdę nie bardzo wie kogo poinformować, jeżeli np.
zmieni się u niego status.
W takim schemacie klient musiałby też stać
się serwerem, czyli mieć jakiś konkretny endpoint.
Ja jako Grzegorz, moja przeglądarka albo moja aplikacja Uber musiałaby legitymować
się jakimś adresem do protokołu HTTP, czyli jakimś moim prywatnym adresem, który
serwer mógłby od razu zaatakować takim powiadomieniem.
I w przypadku Webhooks
tak właśnie wygląda ten schemat.
To my jako klient mówimy, że słuchaj serwerze albo wszystkie serwery świata,
ja jestem dostępny pod adresem Grzegorz.Róg/Powiadom mnie
i serwery, które subskrybują
ten nasz adres przyjmują to do informacji i wtedy, kiedy dzieje się jakaś akcja,
która wymaga powiadomienia nas, wysyłają nam automatycznie wiadomość.
Tak właśnie działają np. powiadomienia SMS owe.
Jeżeli jesteś zapisany na subskrypcję powiadomienia SMS owego np.
o jakimś webinarze, który ma się odbyć, to
w momencie, kiedy na serwerowym zegarze zmienia się godzina np.
na za 10 webinar wtedy jest odpalana akcja
wysyłamy do wszystkich subskrybentów pod konkretny numer danego SMS a.
No tylko właśnie tutaj mamy ich numer, czyli numer telefonu czy np.
numer Whatsapp, na który możemy automatycznie wysłać tą informację
a w przypadku przeglądarki takiego zwykłego klienta nie mamy tego numeru.
Nawet adres IP nie jest dla nas taką
informacją, bo on przecież może być zmienny.
W związku z tym klient w przypadku Webhooks
wystawia dla serwera taki adres, na który może być notyfikowany.
Tak w skrócie to działa, ale pokażę Ci
konkretnie co możemy z tym zrobić i dlaczego to jest bardzo fajne.
Na stronie Pipedream możesz stworzyć sobie swój własny endpoint.
Wybieram polecenie Create endpoint.
Jeśli już kojarzysz tą naszą nomenklaturę,
no to właśnie endpoint będzie tą końcówką API, do której ktoś może się dostać.
I teraz ja mam swój unikalny endpoint pod
adresem jakimś takim dziwnym na domenie pipedream.net.
Mogę go skopiować,
on jest tylko mój i wszystkie rzeczy,
które na niego przyjdą będę mógł otrzymywać tutaj.
Te wszystkie request czyli ja działam jako serwer.
Mam tutaj informacje Waiting for first request
czyli on cały czas nasłuchuje czy jakiś request zostaje do mnie wysłany.
Przy okazji mam tutaj różne kody JAVASCRIPT, CURL, NODE itd.
które mogą zostać użyte po to, żeby mnie notyfikować.
Weźmy CURL i po prostu to skopiuję do terminala.
Tak będzie nim najprościej i zobacz.
Jest to komenda, która pozwoli wysłać parametr,
czy w zasadzie to jest taki widzisz JSON gdzie mamy klucz wartość name Yoda
na naszą aplikację. Wysłamy z pomocą return, mam informację zwróconą od
serwera czyli mnie w tym momencie, że się udało success true
i mogę zobaczyć, że tutaj już dostałem coś postem, klikam i patrzę,
rzeczywiście mam tutaj informacje Yoda.
Gdybym chciał w ten sposób złożyć do siebie zamówienie o pizzę, mógłbym to
zrobić, ale prawdopodobnie wtedy skorzystałbym już z Postmana,
no i tutaj jest coś takiego jak możliwość zaimportowania np.
Paste Raw Text i wklejam sobie ten curl,
wybieram polecenie import,
ładnie mi się to zaim,portowało
tutaj mam metodę POST
mamy odpowiedni adres
i jako parametry tego nie mam co chciałem przekazać, ale w samej treści mam tego
prostego JSON Name Yoda, mogę przełożyć to na imię Grzegorz
jak również wygenerować sobie jakiś nawet bardziej złożony schemat JSON
tak jak Ci pokazałem i wybieram polecenie send i wysyłam kolejną
informację od serwera z powrotem dostaję w treści informację o sukcesie.
W nagłówku będzie to kod 200
prawdopodobnie.
A to co mogę sobie tutaj zobaczyć to jest
kolejna rzecz, którą otrzymałem postem, czyli imię Grzegorz.
Czyli teraz potrafię zrobić
tak, że możesz sobie testować takie zapytania uruchamiając swój własny
endpoint na pipedream i po prostu z pomocą Postman sobie testować różne formaty
danych, wysyłać tutaj, sprawdzać te odpowiedzi.
No i właśnie tak działają Webhooks. Będąc subskrybentem na takim webhook
można wyobrazić sobie sytuację, kiedy
integrujemy różne aplikacje, z których korzystamy i weźmy np.
Slacka.
Slack oferuje możliwość integracji Webhook, dzięki czemu jeżeli np.
coś wydarzy się w naszej aplikacji, nie wiem, klient dokona zakupu, to możemy wtedy z
pomocą Webhook wysłać z tego serwera na Slacka powiadomienie.
Jak to zrobić?
Żeby to zrobić korzystam z API Slack, więc wchodzę na API Slack
jestem tutaj zalogowany jako jeden z administratorów jakiejś grupy na Slack,
w związku z tym mogę na niej utworzyć sobie testową aplikację.
Utworzyłem taką aplikację TestApp i teraz w sekcji Incoming Webhooks będę musiał sobie
aktywować nasłuchiwanie tych Webhook przez Slacka.
Jeżeli to zrobię to będę w tym momencie miał wygenerowany taki specjalny URL.
Na razie muszę jeszcze dodać webhooka do
jakiegoś workspace, czyli klikam sobie Add to Workspace.
Muszę autoryzować się w jakimś kanale albo np.
dla konkretnej osoby, do której będę mógł
wysyłać wiadomości, więc będę chciał wysłać do siebie.
Wybieram polecenie Authorize i autoryzuje się
teraz już od Slacka mam konkretny adres
Webhook URL i pod tym serwisem Slack będzie nasłuchiwał wszystkiego co
tam przyjdzie i publikował to do mnie jako wiadomości.
Oczywiście można doczytać sobie
szczegółowe dokumentację jak powinien wyglądać taki format i tak dalej, ale
zamiast tego można po prostu skopiować sobie ten sample curl request, czyli
wybierzmy tutaj copy i możemy na razie spróbować to wywołać po prostu z konsoli.
Czyli jeśli masz zainstalowanego curl wybierasz sobie właśnie to.
Jak widzisz jest metoda POST.
Ma to jakieś nagłówki headers czyli Content-type,
application/json czyli wysyłamy JSON data, informacje,
będzie to tekst Hello, World na konkretny adres danego hooka.
Rzecz jasna mógłbym sobie treść tej wiadomości zmienić, ja już teraz
nie będę tego robił, tylko po prostu wciskamy enter.
Dostałem ze Slacka odpowiedź OK, a to znaczy, że jeśli teraz przejdę do Slacka
akurat mam wyłączone celowo powiadomienia, ale jeśli wejdę do Slacka, zobacz, że mam
od aplikacji TestApp powiadomienie Hello World.
Mógłbym to samo zrobić sobie przykładowo z Postmana.
Przejdźmy na moment do Postman.
Zapytanie, które stworzę,
nie będę robił już nowego, chociaż może zrobię nowe control n nowy request, damy mu
nazwę test i możemy go wrzucić nawet do Twittera API.
Wszystko jedno, ale nie chcę mieć tych wszystkich nagłówków.
Jeżeli mam curl, to mogę wybrać polecenie
Import Paste Raw Text i ten curl zamienić sobie na zapytanie.
Mamy dobrą metodę wybraną i jeśli chodzi o nagłówki też są dobrze przekazane.
W parametrach nic tutaj nie ma, ale w
treści body mamy tekst Hello World i mogę tutaj sobie wpisać np.
Hello Again,
a następnie to wysłać.
I w tym momencie znów dostaję zwrotną
informację od Slacka OK, wszystko się udało.
A na Slacku mam kolejną wiadomość Hello Again.
W ten sposób mogą różne serwisy komunikować się ze sobą.
My ze szlakiem, a nasz serwis też np.
z aplikacją księgową, która wystawia np.
faktury automatycznie po zakupie w momencie, gdy zakup jest wykonany.
Możemy wysyłać różnego rodzaju
notyfikacje, maile i jeszcze masę, masę innych rzeczy.
A to wszystko w bardzo prosty sposób z pomocą Webhook, czyli z pomocą tego, że
dany serwis będzie pod jakimś adresem nasłuchiwał tego, co do niego wysyłamy.
I to już wszystko w tej lekcji,
ale zostań ze mną, ponieważ w kolejnej
napiszemy sobie fajną, prostą aplikację i pokażę Ci też jak działa Glitch i jak z jego
pomocą będziemy mogli wysyłać podobne Webhooki.
Do usłyszenia.