Mam to pytanie, które przez chwilę krążyło w mojej głowie. Załóżmy, że skonstruowaliśmy nasz projekt z backendem i frontendem na osobnych warstwach. Tak więc, od frontend, chcemy uzyskać Schultz, który pochodzi od formatu hal+json
:Jak należy obsługiwać Hateoas z poziomu interfejsu?
GET /customers/1 HTTP/1.1
Accept: application/hal+json
{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
} {
"rel": "transactions",
"href": "http://localhost:8080/customer/1/transactions"
}]
}
Następnie z frontend chcę, aby wszystkie transakcje z klientami. Moje pytanie brzmi: jak mam zdobyć adres URL? czy powinien pochodzić z reakcji? czy powinienem zbudować go wewnętrznie?
Jeśli pójdziemy z pierwszą opcją, myślę, że być może nie byłoby elegancko do iterowania wszystkich linków, dopóki nie otrzymamy tego, którego chcemy. Ponadto może zdarzyć się sytuacja, w której nie będziemy mieć łącza do żądania, które chcemy wykonać.
jeśli pójdziemy z drugą opcją, nie rozumiem, jak zbudować ten adres URL, jeśli nie mamy prawdziwych identyfikatorów. Jak mogę utworzyć nowe transakcje dla klientów, jeśli hateoas zastąpi identyfikatory ids odnośnikami i nie mam już odniesienia do obiektu w ciele?
Pomyślałem, że być może serwis powinien obsługiwać zarówno application/hal+json
(zorientowany na użytkowników), jak i application/json
(zorientowany na klientów), ale nie widzę, że tak to właśnie robi.
Co myślisz?
Co w przypadku, mam identyfikator użytkownika, który chcę dodać władzę? Następnie powinienem wysłać żądanie GET do/użytkowników, aby uzyskać link do uprawnień określonego użytkownika. To byłoby w porządku? Wykonuję 2 żądania zamiast jednego. Dzięki za twoją odpowiedź! – jscherman
nie powinieneś mieć identyfikatora z zewnętrznego systemu. powinieneś mieć adres URL. I tak, to są 2 prośby ... chyba że serwer jest wystarczająco inteligentny, by znać twoje zamiary. wtedy na przykład może osadzić dla ciebie relację transakcji. Jednym ze sposobów, w jaki można to wyrazić, jest zidentyfikowanie klienta konsumującego za pomocą nagłówka. Ale nie przejmuj się zbytnio 2 prośbami, to bardzo mała cena do zapłacenia. TERAZ, jeśli jesteś wewnętrznie ... dlaczego używasz api HTTP? po prostu przejdź do DB/system lub zarejestruj i uzyskaj potrzebne dane. –
Myślę, że rozumiem. Dzięki! – jscherman