Original articlehttp://www.xfront.com/REST-Web-Services.html

Servizi di edilizia web nel modo REST

Roger L. Costello

Io prima di fornire una breve introduzione di riposo e poi descrivere come costruire servizi Web in stile REST.

Qual è il riposo?

REST è un termine coniato da Roy Fielding nel suo dottorato di ricerca tesi di laurea [1] per descrivere uno stile di architettura di sistemi in rete. REST è un acronimo che sta per Representational State Transfer.

Perché si chiama Representational State Transfer?

Il Web è costituito da risorse. Una risorsa è qualsiasi elemento di interesse. Ad esempio, il Boeing Aircraft Corp può definire una risorsa 747. I clienti possono accedere a tale risorsa con questo URL:

Π

http://www.boeing.com/aircraft/747

ˮ

Una rappresentazione della risorsa viene restituito (ad esempio, Boeing747.html). La rappresentazione pone l'applicazione client in uno stato. Il risultato del cliente che attraversa un collegamento ipertestuale in Boeing747.html è un'altra risorsa si accede. La nuova rappresentazione pone l'applicazione client in un altro stato. Così, lo Stato cambia applicazione client (trasferimento s) con ogni rappresentazione risorsa -> Representational State Transfer!

Ecco la spiegazione di Roy Fielding del significato della Representational State Transfer:

"Representational State Transfer ha lo scopo di evocare un'immagine di come un'applicazione Web ben progettato si comporta: una rete di pagine web (uno stato-macchina virtuale), in cui l'utente procede attraverso un'applicazione selezionando link (transizioni di stato), con conseguente la pagina successiva (che rappresenta lo stato successivo dell'applicazione) viene trasferito all'utente e reso per il loro uso ".

Motivazione per REST

La motivazione per il riposo era quello di catturare le caratteristiche del Web che ha reso il Web di successo. Successivamente queste caratteristiche vengono utilizzati per guidare l'evoluzione del Web.

RIPOSO - uno stile architettonico, non Standard

REST non è uno standard. Non vedrete il W3C mettendo fuori una specifica REST. Non vedrete IBM o Microsoft o Sun vendere toolkit di uno sviluppatore REST. Perché? Perché resto è solo uno stile architettonico. Non si può imbottigliare quello stile. Si può comprendere solo, e progettare i propri servizi Web in quello stile. (Analogamente lo stile architettonico client-server. Non esiste uno standard client-server.)

Mentre resto non è uno standard, che fa gli standard di utilizzo:

         HTTP

         URL

         XML / HTML / GIF / JPEG / etc (Resource Rappresentazioni)

         text / xml, text / html, image / gif, image / jpeg, ecc (tipi MIME)

Il sistema REST Classic

Il Web è un sistema di riposo! Molti di questi servizi Web che state utilizzando questi anni - Servizi libro-ordinazione, servizi di ricerca, servizi on-line del dizionario, ecc - sono i servizi Web basati su REST. Ahimè, è stato utilizzato REST, la costruzione di servizi REST e non hai nemmeno lo sai.

REST è interessato con il "quadro" del Web. Non si tratta di dettagli di implementazione (ad esempio, utilizzando servlet Java o CGI per implementare un servizio Web). Quindi diamo un'occhiata a un esempio di creazione di un servizio Web dal resto prospettiva "big picture".

Parts Depot Web Services

Parti Depot, Inc. (società fittizia) ha implementato alcuni servizi web per consentire ai propri clienti di:

         ottenere un elenco delle parti

         ottenere informazioni dettagliate su una particolare parte

         inviare un ordine di acquisto (PO)

Consideriamo come ciascuno di questi servizi sono implementati in modo RESTful.

Get Elenco delle parti

Il servizio web mette a disposizione un URL a una risorsa elenco delle parti. Ad esempio, un cliente potrebbe utilizzare questo URL per ottenere l'elenco delle parti:

Π

http://www.parts-depot.com/parts

ˮ

Si noti che il "come" il servizio Web genera l'elenco delle parti è completamente trasparente per il cliente. Tutto il cliente sa è che se lui / lei invia la URL sopra, allora viene restituito un documento contenente l'elenco dei componenti. Dal momento che l'implementazione è trasparente per i clienti, parti Depot è libero di modificare l'implementazione sottostante di questa risorsa senza impattare i clienti. Si tratta di accoppiamento lasco.

Ecco il documento che il cliente riceve:

Π

<? Xml version = "1.0"?>

<P: Parti xmlns: p = "http://www.parts-depot.com"

xmlns: XLink = "http://www.w3.org/1999/xlink">

<Parte id = "00345" xlink: href = "http://www.parts-depot.com/parts/00345" />

<Parte id = "00346" xlink: href = "http://www.parts-depot.com/parts/00346" />

<Parte id = "00347" xlink: href = "http://www.parts-depot.com/parts/00347" />

<Parte id = "00348" xlink: href = "http://www.parts-depot.com/parts/00348" />

</ P: Parts>

ˮ

[Si supponga che attraverso la negoziazione del contenuto del servizio stabilito che il cliente vuole la rappresentazione in formato XML (per machine-to-machine di elaborazione).] Si noti che l'elenco delle parti ha collegamenti per ottenere informazioni dettagliate su ogni parte. Questa è una caratteristica fondamentale di riposo. I trasferimenti client da uno stato all'altro, esaminando e scegliendo tra gli URL alternativi nel documento di risposta.

Ottenere dettagliata dei dati Parte

Il servizio web mette a disposizione un URL per ogni risorsa parte. Esempio, ecco come un client richiede parte 00345:

Π

http://www.parts-depot.com/parts/00345

ˮ

Ecco il documento che il cliente riceve:

Π

<? Xml version = "1.0"?>

<P: xmlns: P = "http://www.parts-depot.com"

xmlns: XLink = "http://www.w3.org/1999/xlink">

<Part-ID> 00345 </ Part-ID>

<Nome> Widget-A </ Name>

<Description> Questa parte viene utilizzata nell'assemblaggio FRAP </ description>

<Specifica xlink: href = "http://www.parts-depot.com/parts/00345/specification" />

<Costounitario moneta = "USD"> 0.10 </ Costounitario>

<Quantità> 10 </ Quantità>

</ P: Part>

ˮ

Anche in questo caso osservare come questo dato è legato dati ancora di più - le specifiche per questa parte può essere trovata attraversando il collegamento ipertestuale. Ogni documento di risposta permette al cliente di drill-down per ottenere informazioni più dettagliate.

Invia PO

Il servizio web mette a disposizione un URL per inviare un ordine di acquisto. Il client crea un documento di istanza PO conforme allo schema PO che Parts Depot ha progettato (e pubblicizzato in un documento WSDL). Il client invia PO.xml come il carico utile di un HTTP POST.

Il servizio PO risponde alla HTTP POST con un URL al PO presentata. Così, il cliente può recuperare il PO qualsiasi momento successivo (per aggiornare / modificarlo). Il PO è diventato un pezzo di informazione che è condiviso tra il client e il server. Le informazioni condivise (PO) viene dato un indirizzo (URL) dal server ed è esposto come un servizio Web.

URL logici contro URL fisiche

Una risorsa è un'entità concettuale. Una rappresentazione è una manifestazione concreta della risorsa. Questo URL:

Π

http://www.parts-depot.com/parts/00345

ˮ

è un URL logico, non un URL fisico. Così, non ci deve essere, per esempio, una pagina HTML statico per ogni parte. Infatti, se ci fossero un milione di parti poi un milione di pagine HTML statiche non sarebbe un design molto accattivante.

[Attuazione dettaglio: Parts Depot potrebbe implementare il servizio che riceve i dati dettagliati su una parte particolare impiegando una Servlet Java, che analizza la stringa dopo il nome host, utilizza il numero di parte per interrogare il database parti, formulare i risultati della query come XML, e quindi restituire il XML come payload della risposta HTTP.]

È un dato di URL di stile non dovrebbe rivelare la tecnica utilizzata implementazione. Hai bisogno di essere libero di cambiare l'implementazione senza impattare i clienti o avere URL fuorvianti.

REST Web Services Caratteristiche

Ecco le caratteristiche di REST:

         Client-Server: uno stile di interazione pull-based: i componenti che consumano tirare rappresentazioni.

         Stateless: ogni richiesta dal client al server deve contenere tutte le informazioni necessarie per comprendere la richiesta, e non può trarre vantaggio da qualsiasi contesto memorizzato sul server.

         Cache: per migliorare le risposte efficienza della rete deve essere in grado di essere etichettato come memorizzabile nella cache o non-cacheable.

         Un'interfaccia uniforme: tutte le risorse sono accessibili con un'interfaccia generica (ad esempio, HTTP GET, POST, PUT, DELETE).

         Risorse Named - Il sistema è composto di risorse che vengono denominati utilizzando un URL.

         Interconnessi rappresentazioni delle risorse - le rappresentazioni delle risorse sono interconnessi tramite URL, consentendo in tal modo un cliente di passare da uno stato all'altro.

         Componenti Layered - intermediari, come i server proxy, server cache, gateway, ecc, possono essere inseriti tra i clienti e le risorse per sostenere le prestazioni, la sicurezza, ecc

Principi di REST Web Service Design

1. La chiave per la creazione di servizi Web in una rete REST (vale a dire, il Web) è quello di individuare tutte le entità concettuali che si desidera esporre come servizi. Sopra abbiamo visto alcuni esempi di risorse: elenco parti, i dati dettagliati della parte, ordine di acquisto.

2. Creare un URL per ogni risorsa. Le risorse dovrebbero essere sostantivi, verbi e non. Ad esempio, non utilizzare questa:

Π

http://www.parts-depot.com/parts/getPart?id=00345

ˮ

Si noti il verbo, getPart. Al contrario, utilizzare un nome:

Π

http://www.parts-depot.com/parts/00345

ˮ

3. Classificare le risorse a seconda che i clienti possono solo ricevere una rappresentazione della risorsa, o se i clienti possono modificare (aggiungere) la risorsa. Per i primi, rendere tali risorse accessibili tramite un HTTP GET. Per il dopo, rendere tali risorse accessibili tramite HTTP POST, PUT e / o cancellare.

4. Tutte le risorse accessibili via HTTP GET dovrebbero essere privi di effetti collaterali. Cioè, la risorsa deve solo restituire una rappresentazione della risorsa. Invocare la risorsa non dovrebbe comportare la modifica della risorsa.

5. Nessun uomo / donna è un'isola. Allo stesso modo, nessuna rappresentazione dovrebbe essere un'isola. In altre parole, mettere i collegamenti ipertestuali all'interno di rappresentazioni di risorse per consentire ai clienti di drill-down per ulteriori informazioni e / o per ottenere informazioni correlate.

6. Progettazione per rivelare i dati a poco a poco. Non rivelare tutto in un unico documento di risposta. Fornire collegamenti ipertestuali per ottenere maggiori dettagli.

7. Specificare il formato dei dati di risposta utilizzando uno schema (DTD, W3C Schema, RelaxNG o Schematron). Per quei servizi che richiedono un POST o PUT ad esso, fornire anche uno schema per specificare il formato della risposta.

8. Descrivere come i vostri servizi sono ad essere invocate per mezzo di un documento WSDL, o semplicemente un documento HTML.

sommario

Questo articolo ha descritto resto come uno stile architettonico. In realtà, è lo stile architettonico del Web. REST descrive ciò che rende il Web funziona bene. Aderendo ai principi REST renderà i vostri servizi funzionano bene nel contesto del Web.

In un prossimo articolo scriverò circa l'evoluzione del Web utilizzando i principi REST.

Riconoscimento

Grazie a Robert Leftwich e Philip Eskelin per i loro utili commenti molto nella creazione di questo documento.

Home