Skip to content

Witaj w Świecie Jutra!

  • Technologie jutra
  • Sprzęt jutra
  • Aplikacje jutra
  • Programowanie
  • Księga Drogi
  • Renowacja
  • Różności
  • Archiwum
  • Autor
  • Home
  • Wszystko
  • Czym jest REST (i SOAP)?
  • Programowanie
  • Wszystko

Czym jest REST (i SOAP)?

Jakub Raczkowski 16 kwietnia 2024

Powoli zaczynamy wychodzić poza ramy localhosta i zaglądać do czeluści Internetu. W tym odcinku serii „Czym jest…?” wyjaśnimy czym dokładnie jest i jakie ma zastosowanie REST API.

Uwaga! W tej serii zajmuję się opisowym przedstawieniem tematu, a celem jest zapoznanie z zagadnieniem w sposób luźny i zrozumiały dla nowicjusza. W związku z tym wiele elementów siłą rzeczy musi zostać pominiętych. Tych z was, którzy chcieliby się dowiedzieć więcej, zapraszam do źródeł na końcu artykułu.

Czy zastanawialiście się kiedyś jak działa Internet?
.
.
.
Hmm, chociaż to może zbyt duże uogólnienie, zatem pozwólcie mi doprecyzować:

Co tam się dzieje „w środku” kiedy wpiszemy adres www i wciśniemy Enter?

…i Enter!

Cóż, trochę tego jest. Wpierw przeglądarka musi dostać konkretny adres IP więc wysyła zapytanie do serwera DNS. Kiedy już dostanie ukochane cyferki, nadaje tam wiadomość z prośbą o przesłanie dostępnej zawartości: kodu html, obrazka czy innego pliku. Następnie docelowy serwer obsługuje to żądanie i jeśli wszystko zadziała, to wysyła wiadomość zwrotną z pożądanym contentem, która zostaje obsłużona przez naszą przeglądarkę. Jeśli ta dostanie plik .html to wyrenderuje nam stronę www, ostyluje za pomocą dołączonego CSS-a i opcjonalnie odpali skrypty JavaScript.

GOTOWE!

Dobrze, skoro mamy ogarnięte jak to wygląda od strony użytkownika, to teraz skupmy się na drugim końcu kija – serwerze. A raczej serwerach, bo zazwyczaj mamy do czynienia z dwoma: frontendowym i backendowym.

Front ubiera pożądaną zawartość w ładne ciuszki i sprawia, że miło wygląda dla oka i aż chce się klikać. Natomiast nawet najpiękniejsza strona nie zatrzyma nas na dłużej, jeśli będzie pozbawiona treści. A ta jest przygotowywana właśnie przez backend.

Podsumowując*: użytkownik wysyła zapytanie do frontu, następnie front do backendu, potem front „ozdabia” tę surową odpowiedź i wysyła z powrotem do klienta strony.

(*) i zakładając, że mówimy o dynamicznie zmieniającym się contencie a nie jakimś statycznym pliku, który może zostać obsłużony bezpośrednio przez front

Ok, jasne. Tylko gdzie tu ten REST?

Zanim przejdziemy do sedna wpisu, chciałbym mieć pewność, że na pewno wiesz czym jest 'Interfejs’.

Interfejs w Javie

Przytoczony przykład z IntelliJ to tylko wizualizacja interfejsu w Javie, która pokazuje jak go napisać, ale nie tłumaczy po co.

We wpisie SOLIDne programowanie mówiłem, że OOP opiera się na abstrakcji, że lepiej typować po interfejsie niż ograniczać się do konkretnej klasy/implementacji. Ale tak właściwie dlaczego?

Interfejs == Standard

Dodając do własnego projektu jakiś interfejs określamy zasady na jakich będzie ów projekt (albo jego część) pracować. Jeśli robimy prosty edytor tekstu to może on mieć interfejs z dwiema metodami:

boolean save();
void open();

Same w sobie nic nie robią, ot dają wskazówkę jaka będzie ich funkcja. To od programisty zależy jak te metody zostaną zaimplementowane. Jeden będzie zapisywał do pliku txt, inny do pdf-a, trzeci od razu wyśle to do bazy danych. Każdy robi po swojemu, ale jednocześnie każdy trzyma się ustalonych zasad.

Taki właśnie jest REST.
To pewien rodzaj standardu dostępu do danych.

REST (skrót od „Representational State Transfer„) to API czyli „Application Programming Interface” – interfejs dający programistom dostęp do naszej aplikacji. Dzięki metodom jakie sami zadeklarujemy, inni developerzy zyskają możliwość korzystania z naszego softu.

REST jako standard ma konkretne metody HTTP, z których możemy skorzystać (ze wszystkich albo z wybranych):

  • GET (ang. „brać”)
  • POST (ang. „wysyłać”)
  • PUT (ang. „wkładać”)
  • PATCH (ang. „łatać”)
  • DELETE (ang. „usuwać”)

Ich nazwy mówią same za siebie, choć nic nie stoi na przeszkodzie* abyśmy zrobili tak, że to POST usuwa elementy, a DELETE je tworzy.

(*) no może poza tłumem wku%wionych użytkowników naszego API, który pochodniami i widłami wybije nam takie żarty z głowy.

Jednak REST to nie tylko nazwy metod, ale również zasady dotyczące tego jak mają działać. Mianowicie:

  1. Bezstanowość – metody nic nie zapamietują, ani użytkownika, ani tego co już zrobił (od tego są pliki cookies).
  2. „Keszowanie” – popularne użycia metod mogą być przerzucone do schowka (ang. „cache”) w celu szybszego obsłużenia.
  3. Podział na klienta i serwer, którzy sa od siebie niezależni (w przeciwnieństwie do np. protokołu P2P gdzie każdy jest jednocześnie klientem i serwerem).
  4. Warstwowość – w skrócie „klient nasz pan”: klient wysyła żądanie i nie interesuje go praca serwera tylko sam rezultat. Klient ma widzieć tylko wierzchnią warstwę aplikacji.
  5. Kod na żądanie – opcjonalnie można wysłać kawałek kodu (JavaScript), który ma zostać uruchomiony już po stronie klienta.
  6. Jednolity standard – REST-owe metody są zawsze takie same, bez względu na rodzaj klienta (desktop, mobile, konsola itp.)
Tak wygląda gotowa metoda GET stworzona przy użyciu Springa (o nim opowiemy sobie już niebawem)

W tym miejscu nie sposób nie napomknąć o bardzo użytecznym narzędziu do poznawania i testowania REST-owych metod jakim jest:

POSTMAN

Zwykle przeglądarka internetowa jest w stanie wywoływać jedynie metodę GET – wchodzimy na stronę i od razu pobieramy jej zawartość, nie możemy ot tak sobie walnąć tam PUT-a i podmienić treści na taką jaka nam pasuje.

I ok, nie-technicznym użytkownikom nie ma co komplikować życia. Ale jeśli dev albo tester będą chcieli sprawdzić dane API to taki nóż do masła nie wystarczy.

Potrzebny będzie szwajcarski scyzoryk: Postman.

Postman występuje w dwóch formach: albo jako rozszerzenie do przeglądarki, albo w tradycyjnej wersji desktopowej. Funkcji jest tam tyle, że ich opisanie wymagałoby osobnego artykułu, ale na dzisiaj skoncentrujmy się tylko na fakcie, że sami możemy wybierać metody API do użycia – przy tej samej zawartości zapytania inny efekt otrzymamy kiedy zawołamy GET-a, a inny dla DELETE-a. Bardzo wygodne i niesamowicie użyteczne.


Na koniec

Jeszcze rok temu, patrząc na wymagane technologie w ofertach pracy, myślałem, że REST jest pewnie jakimś zewnętrznym programem (jak Maven), albo zestawem bibliotek do użycia (jak JUnit) i dopiero po bliższym przyjrzeniu okazało się, że:

REST to interfejs
REST to standard
REST to architektura

A co ciekawe, REST nie jest jedynym koniem w tym wyścigu. Jako, że jego definicja została sprecyzowana dopiero w roku 2000, a Internet jest kilka dekad starszy, to oczywistym musi być, że wcześniej korzystano z czegoś innego. Tym czymś był tak zwany:

SOAP

Simple Object Access Protocol

Różnic trochę jest, ale REST wygryzł kolegę ze stołka, głównie dlatego, że działa szybciej i jest łatwiejszy do zrozumienia/opanowania/użycia. Mimo to SOAP wciąż jest gdzie-nie-gdzie wykorzystywany – jeśli zobaczycie go w ofertach pracy to zazwyczaj oznacza to, że chodzi o wewnętrzne sieci większych korporacji z sektora medycznego albo bankowego.

O ile SOAP już powoli odchodzi w zapomnienie to i sam REST też nie może czuć się bezpiecznie, gdyż już na karku czuje ciepły oddech innego zawodnika:

Żeby nie przedłużać, powiem tylko, że GraphQL wybierany jest najczęściej przez wielkie firmy z grubymi milionami użytkowników i miliardami zapytań każdego dnia (np. Facebook). W takich sytuacjach odchudzenie wiadomości choćby tylko o jeden znak przekłada się na realne oszczędności w pracy serwerów. GraphQL jest właśnie takim rozwiązaniem w którym każde wywołanie jego metod ma zwracać tylko pożądaną zawartość i ani literki więcej. Niestety przy okazji zauważalnie trudniej się go nauczyć niż REST-a.


Na dzisiaj chyba wystarczy informacji. Dziękuję za uwagę i zapraszam już za kilka dni na wpis poświęcony architekturze oprogramowania: „Czym jest DDD (i CQRS)?”.


Żródła:
Porównanie SOAP/REST/GRAPHQL YT/ANG

Tags: programming

Continue Reading

Previous: Czym jest JUnit (i Mockito)?
Next: Czym jest CQRS (i architektura heksagonalna)?

Related Stories

Mageege Moon104 – test niskoprofilowego mechanika
  • Sprzęt

Mageege Moon104 – test niskoprofilowego mechanika

11 marca 2025
Przebranżowienie cz.4
  • Programowanie

Przebranżowienie cz.4

27 lutego 2025
Smartfon Jutra
  • Sprzęt

Smartfon Jutra

15 lutego 2025

Ze świata

  • Antyweb
  • Kwantowo
  • Dwóch po dwóch
7 miesięcy abonamentu za 0 zł — tylko jeden, prosty warunek
Korzystasz z tego komunikatora? Uważaj, możesz być na celowniku oszustów
Pustynna intryga i mroczne tajemnice. Serial pokazuje inne oblicze Ameryki
To doskonały moment, by nadrobić „Yellowstone”. Warto skorzystać okazji
Fałszujesz mObywatela? Czekają cię srogie konsekwencje
Dlaczego istnieje Wszechświat? Oto eksperyment, który nam to wyjaśni
Użytkownicy Steam w tarapatach. Trzeba szybko zmienić hasło
Max znów zmienia nazwę. Oby tym razem na stałe
Kampania prezydencka została zmanipulowana? NASK bije na alarm
Optimus Elona Muska chwali się postępami prac. Czy ktoś chce kupić roztańczonego robota?
Teraz to Google dogoniło Apple. Przydatna funkcja ratuje nawet w domu
Trump autorem katastrofy. Naukowcy apelują o zmianę decyzji
Google inspiruje się Redditem? Do wyszukiwarki może trafić ciekawa funkcja
To zupełnie nie ma sensu. Lodu jest coraz więcej
Jak zbudować "bombę z czarnej dziury"? Naukowcy zaszokowali świat
Pierwsze konkrety na temat iOS 19. Apple zdradza szczegóły
Kupiłeś nowego laptopa na Allegro, a to używka? Wkrótce się to skończy
Tanio jak na Temu. Nowy serwis od Amazon już w Europie
Playstation znika z Polski. Będzie jak w latach 90?
Sony zaprasza na najważniejszą premierę w tym roku. Przecieki psują niespodziankę
Ocalić od zapomnienia
Ostatni kwant
ALH 84001 – meteoryt, o którym mówiono nawet w Białym Domu
HESS zarejestrował kosmiczny elektron o niespotykanej energii [Phys. Rev. Lett.]
Matka ciemnej materii – recenzja biografii “Vera Rubin. Życie”
Satelita, który zerwał się ze smyczy
Wiadomość od Carla Sagana do przyszłych eksploratorów Marsa
Ile najdłużej może trwać zaćmienie Słońca?
Nowa największa liczba pierwsza ma ponad 41 milionów cyfr [GIMPS]
Pulsar 4U 1820-30 wykonuje 716 obrotów na sekundę [AJ]
O przedsprzedaży Pixel 9a w samochodzie – Odcinek #122
Obejrzeliśmy Ukryty Poziom na raz – No Movie Ci
Premiera Nintendo Switch 2, seriale, i piwniczne artefakty – Odcinek #121
Ludzieee, wy tego używacie? Recenzja klawiatury Trust GXT 867 Acira
Sympatyczny mały flagowiec. Samsung Galaxy S25 – recenzja
Recenzja pionowej myszy Natec Crake 2. Się wziął gruby i nawrócił
Podsumowanie 2024 roku: Gry, Smartfony, Seriale – Odcinek #120
Ale ja nie chcę rozmawiać z botem… Infolinia HP i dziwne pomysły z 15-minutowym oczekiwaniem
Temu Amazonu, to się chyba coś nie ten… Pobierania przez USB nie będzie i co nam Pan zrobisz?
Już graliśmy! Demo Pirackiej Yakuzy narobiło mi jeszcze większego apetytu

To może cię zainteresować:

Mageege Moon104 – test niskoprofilowego mechanika
  • Sprzęt

Mageege Moon104 – test niskoprofilowego mechanika

11 marca 2025
Przebranżowienie cz.4
  • Programowanie

Przebranżowienie cz.4

27 lutego 2025
Smartfon Jutra
  • Sprzęt

Smartfon Jutra

15 lutego 2025
Czym jest Swagger?
  • Programowanie

Czym jest Swagger?

22 lipca 2024
  • Technologie jutra
  • Sprzęt jutra
  • Aplikacje jutra
  • Programowanie
  • Księga Drogi
  • Renowacja
  • Różności
  • Archiwum
  • Autor
Copyright © All rights reserved. | DarkNews by AF themes.