Ho questa domanda che mi è passata per la testa per un po '. Supponiamo di aver strutturato il nostro progetto con backend e frontend su livelli separati. Così, dal frontend, vogliamo ottenere un cliente, che si accende formato hal+json
:come dovrebbe essere gestito Hateoas dal frontend?
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"
}]
}
Poi, dal frontend voglio ottenere tutte le transazioni dei clienti. La mia domanda è: come devo ottenere l'url? dovrebbe essere dalla risposta? o dovrei costruirlo internamente?
se andiamo con la prima opzione, penso che forse non sarebbe elegante per iterare tutti i collegamenti fino a ottenere quello che vogliamo. Inoltre, potrebbe verificarsi la situazione in cui non abbiamo il link della richiesta che vogliamo fare.
se andiamo con la seconda opzione, non capisco come costruire quell'URL se in realtà non abbiamo gli id. Come potrei creare nuove transazioni con i clienti se gli hateoas sostituiscono gli id con i link e non ho più il riferimento all'oggetto nel corpo?
Ho pensato che forse il servizio dovrebbe supportare sia application/hal+json
(orientato agli utenti) che application/json
(orientato ai client) ma non vedo che questo è come lo sta facendo in generale.
Cosa ne pensi?
Ciò che nel caso ho l'ID utente che voglio aggiungere un'autorità? Quindi dovrei fare una richiesta GET a/utenti per ottenere il link delle autorità dell'utente specificato. Sarebbe ok? sto facendo 2 richieste invece di una. Grazie per la risposta! – jscherman
non dovresti avere un ID da un sistema esterno. dovresti avere un URL. E sì, sono 2 richieste ... a meno che il server non sia abbastanza intelligente da capire le tue intenzioni. quindi ad esempio potrebbe incorporare la relazione di transazione per te. Un modo in cui potresti dargli quell'intento è identificando il client che consuma con un'intestazione. Ma non preoccuparti troppo delle 2 richieste, è un prezzo molto basso da pagare. ORA, se sei interno ... perché stai usando un API HTTP comunque? basta andare al DB/sistema o registrare e ottenere i dati necessari. –
Penso di aver capito il tuo punto. Grazie! – jscherman