Część 1: Czym jest REST W tej części przyjrzymy się bliżej sposobowi komunikacji pomiędzy klientem a serwerem. Po drodze będziemy odkrywać nowe terminy i wyjaśniać je. Aby wszystko (stało się) jasne przeanalizujemy komunikację klient-serwer na przykładzie jakiejś aplikacji RESTful. Załóżmy, że tworzymy aplikację internetową, która może przechowywać informacje o klientach i ich zamówieniach. Te. nasz system potrafi manipulować niektórymi bytami: tworzyć je, edytować, usuwać i dostarczać o nich informacji. Podmiotami tymi będą:
- klienci - klienci;
- zamówienia – zamówienia klientów;
- przedmioty - towary.
Upraszanie
Żądania klientów są prawie zawsze wysyłane za pośrednictwem protokołu HTTP. Ogólnie żądania HTTP składają się z kilku elementów:- metoda HTTP;
- tytuł;
- URI;
- treść żądania.
URI i zasoby
Dane, które klienci uzyskują lub modyfikują za pomocą żądań, nazywane są zasobami. Podstawą interakcji klient-serwer jest manipulacja zasobami. Zasoby w REST to wszystko, czemu można nadać nazwę. W pewnym sensie są to klasy w Javie. W Javie możemy stworzyć klasę do wszystkiego. Podobnie jest w REST – zasobem może być wszystko: użytkownik, dokument, raport, zamówienie. Wszystko to może być albo abstrakcją jakiejś istoty, albo czymś konkretnym, na przykład plikiem - zdjęciem, wideo, animacją, plikiem PDF. W naszym przykładzie mamy 3 zasoby:- klienci - klienci;
- zamówienia – zamówienia klientów;
- przedmioty - towary.
- /clients - URI wszystkich istniejących klientów;
- /clients/23 - URI konkretnego klienta, czyli klienta o ID=23;
- /clients/4 - URI konkretnego klienta, czyli klienta o ID=4.
- /clients/4/orders — URI wszystkich zamówień klienta nr 4;
- /clients/1/orders/12 - URI zamówienia nr 12 klienta nr 1.
- /clients/1/orders/12/items — URI listy wszystkich produktów w zamówieniu nr 12 sporządzonym przez klienta nr 1.
Metoda HTTP
Metoda HTTP (angielski sposób HTTP) to ciąg dowolnych znaków, z wyjątkiem kontrolek i separatorów, który wskazuje główną operację na zasobie. Istnieje kilka typowych metod HTTP. Wymieniamy te, które są najczęściej używane w usługach RESTful:- GET - służy do uzyskania informacji o konkretnym zasobie (poprzez ID) lub zbiorze zasobów;
- POST - używany do utworzenia nowego zasobu;
- PUT - służy do zmiany zasobu (poprzez ID);
- DELETE - służy do usuwania zasobu (poprzez ID).
Nagłówki
Żądania i odpowiedzi zawierają nagłówki HTTP. Wysyłają dodatkowe informacje na temat żądania (lub odpowiedzi). Nagłówki to pary klucz-wartość. Listę najpopularniejszych nagłówków możesz przeczytać na stronie Wikipedii . Dzięki REST klienci często mogą wysyłać nagłówek Accept w swoim żądaniu do serwera. Konieczne jest poinformowanie serwera, w jakim formacie klient spodziewa się otrzymać od niego odpowiedź. Różne opcje formatu prezentowane są na tak zwanej liście typów MIME. MIME (Multicel Internet Mail Extensions) to specyfikacja kodowania informacji i formatowania wiadomości w celu umożliwienia ich przesyłania przez Internet. Każdy typ MIME składa się z dwóch części oddzielonych ukośnikiem: typu i podtypu. Przykłady typów MIME dla różnych typów plików:- tekst - tekst/zwykły, tekst/css, tekst/html;
- obraz - obraz/png, obraz/jpeg, obraz/gif;
- audio - audio/wav, audio/mpeg;
- wideo - wideo/mp4, wideo/ogg;
- aplikacja - aplikacja/json, aplikacja/pdf, aplikacja/xml, aplikacja/octet-stream.
Accept:application/json
Ten nagłówek informuje serwer, że klient oczekuje odpowiedzi w formacie JSON.
Treść żądania
Wiadomość wysłana przez klienta do serwera. To, czy żądanie ma treść, czy nie, zależy od typu żądania HTTP. Na przykład żądania GET i DELETE zazwyczaj nie zawierają żadnej treści żądania. Ale PUT i POST mogą zawierać: wszystko zależy od funkcjonalnego celu typu żądania. Przecież aby odebrać dane i usunąć je po identyfikatorze (który jest przekazywany w adresie URL), nie trzeba wysyłać dodatkowych danych na serwer. Aby jednak utworzyć nowy zasób (żądanie POST), musisz przenieść ten zasób. To samo dotyczy modyfikacji istniejącego zasobu. W formacie REST do przesyłania treści żądania najczęściej używane są formaty XML lub JSON. Najpopularniejszym formatem jest JSON. Załóżmy, że chcemy wysłać żądanie do serwera i utworzyć w nim nowy zasób. Jeśli pamiętasz, jako przykład spojrzeliśmy na aplikację zarządzającą zamówieniami klientów. Załóżmy, że chcemy stworzyć nowego klienta. W naszym przypadku przechowujemy następujące informacje o klientach: Imię E-mail Numer telefonu Wtedy treścią takiego żądania może być następujący JSON:{
"name" : "Amigo",
"email" : "amigo@jr.com",
"phone" : "+7 (191) 746-43-23"
}
Łączenie próśb
Przyjrzeliśmy się więc, z czego może składać się żądanie klienta. Podamy teraz kilka przykładów zapytań wraz z opisamiWniosek | Opis |
---|---|
|
Uzyskaj informacje o kliencie nr 23 w formacie json lub xml |
|
Utwórz nowego klienta z następującymi polami: Imię - Amigo Email - amigo@jr.com Tel. — +7 (191) 746-43-23 |
|
Edytuj klienta nr 1 w następujący sposób: Imię - Ben E-mail - bigben@jr.com Tel. — +380 (190) 346-42-13 |
|
Usuń z systemu zamówienie nr 6 od klienta nr 12 |
Odpowiedzi
Powiedzmy kilka słów o odpowiedziach serwera. Odpowiedź zwykle składa się z następujących części:- kod odpowiedzi;
- nagłówki;
- treść odpowiedzi.
Kody odpowiedzi HTTP
Przyjrzyjmy się bliżej kodom odpowiedzi HTTP. Oto cytat z Wikipedii: Kod stanu HTTP jest częścią pierwszej linii odpowiedzi serwera na żądania za pośrednictwem protokołu HTTP. Jest to liczba całkowita zawierająca trzy cyfry po przecinku. Pierwsza cyfra wskazuje klasę warunku. Po kodzie odpowiedzi zwykle następuje zdanie objaśniające w języku angielskim oddzielone spacją, które wyjaśnia osobie powód tej konkretnej odpowiedzi. Przykłady:- 201 Utworzono;
- 401 Nieautoryzowane;
- 507 Niewystarczająca pamięć.
- 1ХХ - informacyjny;
- 2ХХ - informować o przypadkach pozytywnego przyjęcia i rozpatrzenia wniosku klienta;
- 3XX - poinformuj klienta, że w celu pomyślnego zakończenia operacji konieczne jest złożenie kolejnego żądania, najczęściej z wykorzystaniem innego URI;
- 4ХХ - błąd klienta. Na przykład niepoprawnie skonstruowane żądanie lub dobrze znany kod 404 Not Found, który może wystąpić, gdy klient zażąda nieistniejącego zasobu;
- 5ХХ - błąd serwera. Zwracany do klienta, jeśli operacja nie powiedzie się z powodu awarii serwera.
GO TO FULL VERSION