Podczas budowania usługi REST z ograniczeniem HATEOAS bardzo łatwo jest ogłosić istnienie zasobów poprzez łączenie. Robisz GET
do katalogu głównego mojej witryny, a ja odpowiadam dokumentem głównym z listą wszystkich zasobów pierwszego poziomu:
{
users: { href: "/users" }
questions { href: "/questions" }
}
Klienci, którzy rozumieją, jak odczytać te href
wartości, mogą wykonywać GET
na nich żądania i odkrywać wszystkie bieżące zasoby dostępne w aplikacji.
Działa to dobrze w podstawowych scenariuszach wyszukiwania, ale nie wskazuje, czy zasób ma możliwość zapytania. Na przykład rozsądne może być wykonanie:
GET /users?surname=Smith
Czy są jakieś formaty, które mogłyby wyrazić tę zdolność zapytania przy wystarczającej ilości informacji, aby klient mógł utworzyć spójne zapytanie bez konieczności wcześniejszej wiedzy o zasobie?
Ponadto, czy jest jakiś sposób, aby wyrazić, że klient może wykonać POST
określoną lokalizację w oczekiwanej lokalizacji. Na przykład można oczekiwać, że klient wykona następujące czynności, aby utworzyć nowy zasób pytań:
POST /questions
{
title: "Are there strategies for discovering REST services using HATEOAS?",
body: "When building a REST service with the HATEOAS constraint, it's very..."
}
Używając HTML jako formatu do spożycia przez ludzi, możemy wyrazić wiele z tego, korzystając z formularzy i pisemnych podpowiedzi, aby umożliwić człowiekowi odkrycie operacji, które mogą wykonywać w usłudze.
Czy istnieją formaty zdolne do podobnych rzeczy dla klientów?
Odpowiedzi:
Skąd miałbyś wiedzieć, jakie dane wejściowe są dopuszczalne? To znaczy, jeśli twój klient nie ma wcześniejszej wiedzy, jak zdefiniowałbyś semantykę „nazwiska”? Zaczynasz dostawać się na terytorium, potrzebując czegoś takiego jak OWL .
Myślę, że bardziej praktyczne jest oczekiwanie od klientów zrozumienia semantyki dobrze znanych typów mimów; powiedzmy na przykład „text / vcard” dla ludzi.
źródło
application/atomapp+xml
i używać ją dla wszystkich klientów, którzy już rozumieją ten format. Prawdopodobnie istnieje wystarczająco dużo znanych rodzajów treści, aby uczynić to praktycznym rozwiązaniem.Możesz publikować szczegółowe informacje o swoich usługach poprzez „WADL”
http://en.wikipedia.org/wiki/Web_Application_Description_Language
Jest to opcjonalne i nie każda technologia REST zaplecza to obsługuje. Jersey, „oficjalna” implementacja java-rs w Javie, obsługuje ją na przykład - można ją wygenerować automatycznie.
Jest to jednak dość rzadkie, aby zobaczyć, że jest używany.
Nie znam dużych, którzy go używają. Ogólnie masz stronę internetową opisującą interfejs.
źródło
Wiosna ma na to pewne wsparcie, podobnie jak resteasy.
źródło