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

9

La mia comprensione di REST consente di modellare le operazioni di servizio come rappresentazione di stato e transizione da uno stato a un altro facendo uso di 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 conosco come uno sviluppatore / architetto intelligente e rispettato dalla comunità. Per citare una dichiarazione specifica di quel post

The representation is a bit different – it describes the current state of the resource (when requested).

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

    
posta Suhas 22.05.2016 - 20:11
fonte

3 risposte

13

Risposta breve

The map is not the territory.

Risposta più lunga - come con qualsiasi cosa REST, il il posto dove iniziare è con tesi ; in particolare capitolo 5 . Per la tua domanda attuale, vuoi la sezione 5.2.1.

REST is defined by four interface constraints: identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state.

Resource

The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.

Rappresentanza

REST components perform actions on a resource by using a representation to capture the current or intended state of that resource and transferring that representation between components. A representation is a sequence of bytes, plus representation metadata to describe those bytes. Other commonly used but less precise names for a representation include: document, file, and HTTP message entity, instance, or variant.

A representation consists of data, metadata describing the data, and, on occasion, metadata to describe the metadata (usually for the purpose of verifying message integrity).

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

    
risposta data 22.05.2016 - 22:19
fonte
1

Una risorsa potrebbe essere una fattura.

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

Prendi lo stato attuale della fattura (ad esempio: tutti i dati della fattura nel database) e fornisci una rappresentazione specifica (ad es. html, xml, json) in un momento specifico, per il trasferimento su un altro dispositivo (es: un browser)

    
risposta data 23.05.2016 - 03:50
fonte
1

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

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

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

Una delle principali realizzazioni nell'architettura del server client è che non puoi portare la risorsa al client e non dovresti provare a farlo come fai tu. Invece, nell'API REST, puoi manipolare da remoto una risorsa trasferendo le rappresentazioni della risorsa. Pensa a questo, FedEx non è 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 desiderate. Il servizio quindi manipola lo stato effettivo della lampada per conto del cliente o respinge la richiesta, ad esempio se il client 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, la rappresentazione può non essere aggiornata con lo stato della risorsa.

    
risposta data 27.05.2016 - 15:55
fonte

Leggi altre domande sui tag