Rzeczywiste przykłady dla HATEOAS (architektura REST) ​​[zamknięte]

140

jak każdy mógł zauważyć, istnieje wiele fałszywych / podstawowych interfejsów API REST na wolności (które implementują HTTP-API i nazywają go REST bez przestrzegania wymagania hipertekstu jako silnika stanu aplikacji, co doprowadziło do słynnej tyrady Roya T. Fieldinga , człowieka, który jako pierwszy określił paradygmat REST).

Nie udało mi się znaleźć żadnych praktycznych przykładów prawdziwie sterowanej hipertekstem implementacji REST wraz z powiązanymi definicjami typów mediów specyficznych dla aplikacji dla przejść między stanami.

Czy są dostępne publicznie przykłady takich realizacji?

pmf
źródło
3
Uważam to za interesujące, ponieważ wiele osób twierdzi, że REST jest „łatwy”, ale sam Fielding mówi, że chociaż jest to prosta architektura, nie jest łatwo zaprojektować z nim aplikację.
aehlke
3
Nawiasem mówiąc, powinno to być HATEOAS, a nie HATEOS, później nie jest dobrze google.
David Roussel
2
Wygląda na to, że Paypal go używa: developer.paypal.com/docs/integration/direct/ ...
Andrew Thaddeus Martin
Czy Roy Fielding sam kiedykolwiek stworzył aplikację przy użyciu HATEOAS?
systemovich

Odpowiedzi:

102

Nie jest to implementacja w sensie uruchamiania kodu, ale bardzo podoba mi się artykuł „ Jak dostać filiżankę kawy ” w InfoQ. Opisuje proces zamawiania kawy w Starbucks jako protokół RESTful. Wykracza to poza typowy artykuł wprowadzający REST „wszystko jest zasobem” i koncentruje się na HATEOAS. Wysoce rekomendowane.

trendy
źródło
5
Książka „Rest in Practice” autorstwa Jima Webbera, Sayasa Parastatidisa i Iana Robinsona jest całkiem przydatna
DomreiRoam
2
Artykuł jest w porządku, ale niestety opisywany przez niego interfejs API nie jest ściśle zgodny z zasadą HATEOAS, ponieważ nie używa niestandardowych typów mediów. Skąd klient miałby wiedzieć, jak manipulować (np. Deserializować, analizować, wyświetlać) każdym zasobem, jeśli wszystko jest w formacie application / xml? Zależałoby to od niestandardowych sposobów przekazywania tych informacji, takich jak dokumentacja przeznaczona do czytania przez ludzi.
ygormutti
21

A co z Sun Cloud API ? Od wprowadzenia:

API z góry nie zakłada żadnej określonej struktury w przestrzeni URI. Punktem wyjścia jest identyfikator URI dostarczony przez dostawcę usług w chmurze, który identyfikuje samą chmurę. Reprezentacja chmury zawiera identyfikatory URI dla innych zasobów w chmurze, a także dla operacji, które można na nich wykonać (na przykład wdrażanie i uruchamianie maszyn wirtualnych).

Fabuła może również być pomocne.

Rich Apodaca
źródło
2
To historia, która doprowadziła mnie do ścieżki HATEAOS.
CyberFonic
3
wszystkie linki są martwe
Roeland Van Heddegem
„Przepraszamy, strona kenai.com została zamknięta”.
Nick Rolando,
@NickRolando, podmieniłem link.
Rich Apodaca
@RichApodaca, link do historii jest martwy.
Vasantha Ganesh K
7

Netflix ma REST API oparty na HATEOAS, który zawiera linki jako część zasobów.

Will Sargent
źródło
1
a teraz kod statusu to 404.
naXa
1
Link @ Will Sargent jest uszkodzony, zaktualizuj.
Govi S
Przepraszamy, wygląda na to, że Netflix usunął go i poszedł z czymś innym.
Will Sargent
2
Odpowiedzi zawierające tylko łącze są zwykle mniej istotne, gdy takie linki są martwe.
nyedidikeke
@nyedidikeke to link, ale odpowiedź na ten kontekst, wystarczy naprawić link, edytując post!
Al-Mothafar
3

Czy w czwartym punkcie Roya nie odniesiono się do RESTfulness Sun Cloud API:

REST API nie może definiować stałych nazw zasobów ani hierarchii (oczywiste połączenie klienta i serwera). Serwery muszą mieć swobodę kontrolowania własnej przestrzeni nazw. Zamiast tego pozwól serwerom instruować klientów, jak konstruować odpowiednie identyfikatory URI, na przykład w formularzach HTML i szablonach URI, definiując te instrukcje w typach mediów i relacjach łączy. [Błąd w tym miejscu oznacza, że ​​klienci przyjmują strukturę zasobów ze względu na informacje pozapasmowe, takie jak standard specyficzny dla domeny, który jest zorientowanym na dane odpowiednikiem funkcjonalnego sprzężenia RPC].

Przykład 1 Stałe nazwy zasobów w zdefiniowanym dziedziczeniu:

Z Sun Cloud API: „… reprezentacja VDC będzie zawierała reprezentacje klastrów, które go zamieszkują, które z kolei obejmują reprezentacje maszyn wirtualnych w każdym klastrze”.

Przykład 2 informacje pozapasmowe, takie jak standard domeny:

Musisz mieć zawartość strony wiki (informacje spoza pasma), aby wiedzieć, że „mechanizm komunikacji zasobów” dla pola zasobów chmury „uri” to GET.

Jeż
źródło
2
Masz rację, to jest bardzo mylące. Jednak Roy mówi o nazwach zasobów w przestrzeni uri, a nie w treści typu mediów. Firma Sun może w dowolnym momencie zmienić identyfikator URI używany do uzyskiwania dostępu do klastra. Oczywiście nie może zmienić terminu „klaster” na „grupę” w reprezentacji bez tworzenia nowej wersji typu nośnika, ale może zmienić URI na cokolwiek.
Darrel Miller
4
Wiemy, że Sun API używa HTTP jako swojego jednolitego interfejsu, więc klient nie musi przeglądać strony wiki, aby wiedzieć, że GET jest prawidłowym czasownikiem dla zasobu chmury. Może po prostu spróbować, biorąc pod uwagę, że GET jest czasownikiem bezpiecznym, lub może użyć opcji OPTIONS, aby określić, czy jest dostępny.
Darrel Miller
3

Zdałem sobie sprawę, że pytano o to jakiś czas temu, ale próbowałem zademonstrować „właściwy” przepływ interfejsu API REST, aby uzyskać prosty przykład. Próbowałem postępować zgodnie z regułami Roya dla REST - być może mogłoby to pomóc: Przykład API z wykorzystaniem REST

jeremyh
źródło