Cos'è veramente una risorsa?

1

Sto iniziando a studiare su web api's e REST e sto attraversando un periodo difficile per capire quale sia davvero una risorsa. Fondamentalmente il libro che sto leggendo dice che una risorsa è una mappatura concettuale di una o più entità . Cercando su internet ho trovato questo da una tesi:

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.

Che ancora una volta dice che una risorsa è una mappatura concettuale a una o più entità, ma ciò dice che qualsiasi informazione che può essere nominata può essere una risorsa. Il libro sottolinea anche che l'entità in questo caso non si riferisce agli oggetti di business ma può essere davvero qualsiasi cosa.

Ora, questa idea di risorsa sembra abbastanza importante, ma non riesco a capire cosa sia realmente una risorsa e perché dovrebbe essere una mappatura.

Quindi cos'è veramente una risorsa, perché dovrebbe essere una mappatura a una o più entità e quali sono alcuni esempi?

    
posta user1620696 31.01.2015 - 14:44
fonte

2 risposte

4

Una risorsa è semplicemente qualcosa che puoi ottenere attraverso un URI (Uniform Resource Identifier), cioè un'informazione che ha un URI associato.

Immagina un'immagine funny-cat.jpg sul tuo PC; solo tu puoi accedervi. Questa non è una risorsa. Se, d'altra parte, installi un server HTTP che punta alla directory contenente l'immagine, puoi ora accedere all'immagine tramite un URI simile a link ; ora è una risorsa.

Si noti che una risorsa può essere statica (un'immagine nell'esempio precedente) o dinamica ( collegamento ). Ciò significa che una risorsa non è necessariamente qualcosa che esiste permanentemente su un server.

Si noti inoltre che una risorsa ha un URI, ma non ha necessariamente un solo URI. Ad esempio, link e link potrebbe puntare alla stessa risorsa (qui usando la tecnica di riscrittura degli URL).

Nell'opuscolo della tua risposta, la frase chiave è:

Any information that can be named can be a resource.

Un'immagine può essere denominata ( link ). L'elenco delle ultime notizie può essere nominato ( link ). L'immagine memorizzata sul tuo PC senza server HTTP su di essa non può essere nominata (non c'è alcun URI che puoi dare a CURL per ottenere questa immagine), quindi non è una risorsa.

    
risposta data 31.01.2015 - 14:50
fonte
1

So what is really a resource, why it should be a mapping to one or more entities and what are some examples?

In caso di dubbi su qualsiasi cosa relativa a REST, considera la domanda nel contesto del Web.

Ecco un flusso:

  1. Voglio leggere la homepage di Bob
  2. Lo so (probabilmente perché qualche altra pagina web mi ha detto) che esiste un gestore di richieste http con id / user / bob / homepage
  3. Invio GET / user / bob / home page al server web
  4. Il server web usa id / user / bob / home page per cercare il gestore della richiesta http
  5. Il server Web delega la richiesta http al gestore richieste trovato
  6. Il gestore delle richieste restituisce una rappresentazione della homepage di Bob

In questo esempio, / user / bob / homepage è l'identificatore di risorse uniformi. Che risorsa sta identificando? In questo caso, la risorsa è un gestore di richieste http che fornisce una rappresentazione del concetto "Home page di Bob" associando tale concetto a un documento HTML memorizzato nel file system locale OPPURE a un documento markdown in un archivio valori-chiave OPPURE una rappresentazione xml di un set di risultati fornito da un database relazionale più un modello OPPURE un recupero da una cache locale OR ....

Considera alcuni degli uris alternativi che potresti aver visto

ftp://localhost/user/bob/homepage
file:///ftproot/user/bob/homepage

Questi non sono due identificatori diversi per un singolo file, quelli sono identificatori di due risorse diverse che forniscono una copia del file. Sappiamo che sono risorse diverse, perché il secondo funziona ancora quando chiudiamo il server ftp.

mailto:[email protected]

Una cosa divertente - il concetto è qualcosa come "una bozza di un'e-mail con il set di intestazione". E la risorsa è ... qualcosa nel tuo client di posta che genera una rappresentazione di una e-mail con l'intestazione impostata su questo indirizzo?

È deliberatamente molto sfocato, e astratto, perché è da lì che viene il potere. Confronta

  1. Google: GET / user / bob / home page
  2. Server: 200
  3. Amici più vicini di Google 2M: GET / user / bob / home page
  4. Server: 500

con questa alternativa

  1. Google: GET / user / bob / home page
  2. Proxy: GET / user / bob / homepage
    • "Non so di cosa si tratta"
    • "E non so rappresentarlo"
  3. Server: 200
  4. Proxy: 200
    • "Ancora non so cosa sia"
    • "Ma ora che so come rappresentarlo, ne conserverò una copia"
  5. Amici più vicini di Google 2M: GET / user / bob / home page
  6. Proxy: 200

Perché funziona? Perché le richieste identificano la risorsa senza che limitano l'implementazione della risorsa.

E infine, ricorda che Fielding non sta descrivendo il web; sta affermando che il web scala a causa dei principi architetturali su cui è basato, e se si basa una nuova applicazione sugli stessi principi, la nuova applicazione sarà anche in grado di supportare la scala web.

    
risposta data 30.01.2016 - 08:22
fonte

Leggi altre domande sui tag