Come vengono specificati i valori di hypermedia rel nell'interfaccia uniforme REST?

3

Sto imparando un po 'su REST e sono intrigato dal concetto di un'interfaccia uniforme e dalla capacità di un client di seguire i collegamenti ipermediali al fine di rilevare le capacità del servizio.

A quanto ho capito, il server RESTful restituirà una "rappresentazione" del documento ipermediale di una "entità" che contiene collegamenti pertinenti. Se si utilizza il tipo di supporto HTML, ad esempio, i collegamenti saranno decorati con un attributo "rel" che specifica il significato del collegamento: il client non deve guardare l'href del collegamento, che è un identificativo di risorsa opaco. Il client quindi segue il link opaco a un'altra risorsa che restituisce una nuova rappresentazione che è correlata a quella corrente in un modo descritto dall'attributo rel.

Quello che non capisco è come il cliente sa che valori relano da cercare. Sembra che questi devono ancora essere concordati tra il client e il server. Come viene comunicato questo accordo? Esiste un equivalente RESTful di, ad esempio, un WSDL?

    
posta John Wu 04.11.2015 - 19:17
fonte

2 risposte

3

Uno dei requisiti che dovrebbero essere soddisfatti prima di poter chiamare un'API "RESTful" è che dovrebbe essere possibile scrivere un'applicazione client generica, oltre a quella API. Con il client generico, un utente dovrebbe essere in grado di accedere a tutte le funzionalità dell'API. Un client generico è un'applicazione client che non presuppone che ogni risorsa abbia una struttura specifica oltre la struttura definita dal tipo di supporto.

Nel tuo esempio, l'applicazione client offrirebbe all'utente la possibilità di seguire i collegamenti. Gli attributi rel vengono visualizzati all'utente e l'applicazione client si aspetta che l'utente comprenda questi valori.

Quanto sopra è noto come requisito REST per avere "Hypermedia as the engine of application state" (HATEOAS). Il vantaggio è che il client non si interromperà quando il back-end modificherà i suoi valori di rel . Senza HATEOAS, l'interfaccia non è RESTful.

Ora, supponiamo di avere un'API HTTP / JSON per un negozio web e vogliamo creare un client HTML / CSS / JavaScript che offra ai nostri clienti un'esperienza utente eccellente. Sarebbe un'opzione realistica lasciare che il client sia un'applicazione client generica ? No. Vogliamo fornire un look-and-feel specifico per ogni specifico elemento di dati e ogni specifico stato dell'applicazione. Non vogliamo includere tutta la conoscenza di queste specifiche di presentazione nell'API, al contrario, il client dovrebbe definire l'aspetto e l'API dovrebbe solo trasportare i dati. Ciò implica che il client ha un accoppiamento hard-coded di elementi di risorse specifici a specifici layout e interazioni dell'utente.

Questa è la fine di HATEOAS e quindi la fine di REST? Sì e no .

, perché se eseguiamo la codifica hard-code dell'API nel client, perdiamo il vantaggio di HATEOAS: le modifiche sul lato server potrebbero interrompere il client.

No , per due motivi:

  1. Essere "RESTful" è una proprietà dell'API, non del client. Finché è possibile, in teoria , per costruire un client generico che offra tutte le funzionalità dell'API, l'API può essere chiamata RESTful. Il fatto che i clienti non rispettino le regole non è colpa dell'API. Il fatto che un client generico abbia una pessima esperienza utente non è un problema. Perché è importante sapere che è possibile avere un client generico, se non abbiamo quel client generico? Questo mi porta al secondo motivo:
  2. Un'API RESTful offre ai clienti la possibilità di scegliere il modo in cui vogliono essere generici, ossia quanto resiliente ai cambiamenti lato server che vogliono essere. I client che devono fornire un'esperienza utente ottimale possono comunque essere resilienti alle modifiche URI, alle modifiche dei valori predefiniti e altro ancora. I client che eseguono lavori batch senza l'interazione dell'utente possono essere resilienti ad altri tipi di modifiche.

Se sei interessato ad esempi pratici, consulta il mio documento JAREST . L'ultima sezione riguarda HATEOAS. Vedrai che con JAREST, anche i client altamente interattivi e visivamente attraenti possono essere abbastanza resilienti alle modifiche sul lato server, anche se non al 100%.

    
risposta data 06.11.2015 - 15:04
fonte
1

Anche con le API REST di hypermedia, non ci si può aspettare che il client possa consumare qualsiasi API senza ulteriore contesto.

I clienti possono solo consumare documenti in un formato che è esplicitamente supportato da quel client, perché altrimenti il cliente non ha idea di cosa fare con campi come foo , bar o foobar .
Il significato, la sintassi e la semantica di questi campi sono descritti nelle specifiche del formato del documento e tale specifica dovrebbe contenere anche quali valori sono possibili per un attributo rel e cosa significano quei valori.

    
risposta data 05.11.2015 - 09:33
fonte

Leggi altre domande sui tag