Nel linguaggio REST qual è la differenza tra una risorsa e una rappresentazione?


9

La mia comprensione di REST che consente di modellare le operazioni di servizio come rappresentazione di stato e transizione da uno stato a un altro utilizzando HTTP. Ho sempre compreso le risorse come rappresentazioni dello stato lato servizio fino a poco tempo fa quando ho letto questo articolo di Jimmy Bogard, che so essere uno sviluppatore / architetto intelligente molto rispettato dalla comunità. Per citare una specifica dichiarazione da quel post

La rappresentazione è leggermente diversa: descrive lo stato corrente della risorsa (quando richiesto).

Questo mi ha lasciato confuso. Qual è l'opinione generalmente accettata sull'argomento?


1
Potresti voler dare un'occhiata: Quali argomenti posso chiedere qui? . I sondaggi di opinione non sono in argomento per Programmers.SE.
Adam Zuckerman,

2
Bene, tutto ciò che è elencato in quella pagina non ha risposta in bianco e nero ma tutte le opinioni. Inoltre, non sono sicuro di come questa domanda riguardi l'opinione. È solo perché ho usato la parola "opinione" nella mia domanda?
Suhas,

Principalmente sì. Sfortunatamente (o forse per fortuna), le parole "opinione", "migliore pratica" e simili sono state associate fortemente a "una cavità risonante vuota in cui dovrebbe trovarsi un cervello", poiché la maggior parte delle persone che usano tali termini vogliono semplicemente individuare un branco in lontananza e vai al trotto dopo di esso. Le persone in cerca di definizioni di parole sono spesso i peggiori trasgressori. Quale problema specifico stai cercando di risolvere?
Robert Harvey,

1
Quanto alla tua domanda, una risorsa è semplicemente "qualcosa su Internet con un indirizzo", mentre una rappresentazione è "il modo in cui la cosa su Internet viene riproposta". Può essere un file, una pagina Web o un documento JSON. Può essere un tipo specifico di file, come un documento di Word o un foglio di calcolo. In tutti questi casi, la rappresentazione è quella cosa che stai recuperando. "Lo stato corrente della risorsa" è un riconoscimento che la cosa potrebbe essere cambiata dall'ultima volta che l'hai recuperata.
Robert Harvey,

Risposte:


14

Risposta breve

La mappa non è il territorio.

Risposta più lunga - come per qualsiasi cosa REST, il punto di partenza è con la tesi di Roy Fielding ; in particolare il capitolo 5 . Per la tua domanda attuale, vuoi la sezione 5.2.1.

REST è definito da quattro vincoli di interfaccia: identificazione delle risorse; manipolazione delle risorse attraverso rappresentazioni; messaggi auto-descrittivi; e, hypermedia come motore dello stato dell'applicazione.

Risorsa

L'astrazione chiave delle informazioni in REST è una risorsa. Qualsiasi informazione che può essere nominata può essere una risorsa: un documento o un'immagine, un servizio temporale (ad esempio "il tempo di oggi a Los Angeles"), una raccolta di altre risorse, un oggetto non virtuale (ad esempio una persona) e così via . In altre parole, qualsiasi concetto che potrebbe essere il bersaglio del riferimento ipertestuale di un autore deve rientrare nella definizione di una risorsa. Una risorsa è una mappatura concettuale a un insieme di entità, non l'entità che corrisponde alla mappatura in un determinato momento.

Rappresentazione

I componenti REST eseguono azioni su una risorsa utilizzando una rappresentazione per acquisire lo stato corrente o previsto di quella risorsa e trasferendo tale rappresentazione tra i componenti. Una rappresentazione è una sequenza di byte, oltre a metadati di rappresentazione per descrivere tali byte. Altri nomi comunemente usati ma meno precisi per una rappresentazione includono: documento, file e entità del messaggio HTTP, istanza o variante.

Una rappresentazione è costituita da dati, metadati che descrivono i dati e, a volte, metadati per descrivere i metadati (di solito allo scopo di verificare l'integrità del messaggio).

Quindi: "il tempo odierno a Los Angeles" è una risorsa. Le rappresentazioni candidate includeranno: un documento di testo con le ultime previsioni del servizio meteorologico nazionale; una rappresentazione visiva del radar meteorologico e una registrazione audio della previsione.


2

Una risorsa è la cosa con cui stai lavorando. Ad esempio, se si dispone di un'API per cambiare una determinata lampada, la risorsa è la lampada stessa. Una risorsa può essere fisica (ad es. Lampada, persona) o non fisica (ad es. Articolo, ruolo, una riga nel database), una risorsa può essere primaria (ad es. Saldo) o derivata (ad es. Transazione). Una risorsa può fare riferimento a un'entità specifica (ad esempio la quinta lampada installata in questo portalampada) oppure può fare riferimento a un ruolo che mappa a entità diversa in momenti diversi (ad esempio la lampada attualmente installata, la lampada installata il 5 agosto 2008) oppure può mappare a più entità (ad esempio tutte le lampade della casa).

La rappresentazione di una risorsa è il modo in cui il servizio comunica lo stato della risorsa, ad esempio XML, JSON che rappresenta lo stato della lampada.

Nell'API REST, una risorsa è identificata da un identificatore uniforme (ad es. URI). Una singola risorsa può avere più rappresentazioni, nell'API REST HTTP normalmente si indica la rappresentazione che si desidera utilizzare nelle intestazioni HTTP Content-Type e Accept.

Una realizzazione chiave nell'architettura del server client è che non puoi portare la risorsa al client e non dovresti provare a renderla come fai tu. Invece, nell'API REST, si manipola in remoto una risorsa trasferendo le rappresentazioni della risorsa. Pensa a questo, non hai FedEx la lampada in modo che il client possa manipolare direttamente la lampada, ma piuttosto il servizio crea una rappresentazione XML / JSON / protobuf / CSV della lampada e il client invia una rappresentazione delle manipolazioni previste. Il servizio modifica quindi lo stato effettivo della lampada per conto del cliente o rifiuta la richiesta, ad esempio se il cliente non è autorizzato a eseguire le operazioni sulla lampada. Questo potrebbe sembrare ovvio / spaccare i capelli, ma la cosa importante da notare è che poiché la rappresentazione non è la risorsa stessa,


1

Una risorsa potrebbe essere una fattura.

Una rappresentazione è una fattura in un determinato momento nel formato JSON o nel formato XML. Potresti ottenere la stessa fattura in un secondo momento, sarà la stessa risorsa ma in uno stato potenzialmente diverso (annullato, pagato, ecc.).

Prendi lo stato corrente della fattura (es: tutti i dati della fattura nel database) e gli dai una rappresentazione specifica (es: html, xml, json) in un determinato momento, per il trasferimento su qualche altro dispositivo (es: un browser)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.