Qui sotto la mia traduzione del post di Ryan Tomayko, “How I explained REST to My Wife”. Volevo riformularlo in un dialogo padre-figlio, dato che il post originale è stato accusato di essere sessista, ma poi ci ho ripensato, perchè alla fine, mi sembra un’accusa insensata (vedi le numerose risposte all’accusa di sessismo) che ricorda tanto l’insopportabile abitudine di alcuni di iniziare le lettere con “cari tutti e tutte”. Inoltre il post originale non specifica alcuna licenza d’uso, quindi non credo che i lavori derivati possano essere fatti liberamente. Quindi mi sono limitato a infrangere il diritto d’autore facendo una traduzione non autorizzata (nonchè piuttosto libera). Ho tradotto HTTP GET con PRENDERE e HTTP PRENDI e HTTP PUT con METTERE e HTTP METTERE, tutti gli usi “tecnici” di get e put sono, come nell’originale, in maiuscoletto.

Moglie: Chi è Roy Fielding?

Ryan: Un ragazzo…intelligente.

Moglie: Davvero? e cosa ha fatto?

Ryan: Ha contribuito a creare i primi web server e poi ha fatto un sacco di ricerca per spiegare perchè e come funziona il web. Sulla specifica del protocollo che viene utilizzato per portare le pagine web dai server al tuo browser c’e’ il suo nome.

Moglie: Come funziona?

Ryan: Il web?

Moglie: certo.

Ryan: Hmmm. Beh, è abbastanza stupefacente, davvero. E la cosa buffa è che viene parecchio sottovalutato. Il protocollo di cui ti parlavo, HTTP è capace di fare un sacco di cose belle che la gente per qualche motivo ignora.

Moglie: Intendi proprio quell’http che scrivo all’inizio degli indirizzi nel browser?

Ryan: proprio. Quella parte all’inizio dice al browser quale protocollo deve utilizzare. Quella roba che scrivi è una delle più importanti rivoluzioni nella storia dell’informatica.

Moglie: perchè?

Ryan: Perchè è capace di descrivere la localizzazione di cose in ogni parte del mondo da ogni parte del mondo. Puoi immagirnarla come come le coordinate GPS per la l’informazione e la conoscenza.

Moglie: Per le pagine web?

Ryan: Per qualsiasi cosa in realtà. Quel ragazzo, Roy Fielding, parla un sacco di a cosa puntino quelle cose in quella ricerca di cui ti dicevo. Il web è costruito con uno stile architetturale chiamato “REST“. REST fornisce la definizione di “risorsa”, che è proprio ciò a cui quelle cose puntano.

Moglie: Una pagina web è una risorsa?

Ryan: Più o meno. Una pagina web è la “rappresentazione” di una risorsa. Le risorse sono solamente concetti astratti. URL, quelle cose che scrivi dentro al browser.

Moglie: Lo so che cos’è un URL!

Ryan: Ah giusto. Bene, Gli URL dicono al browser che da qualche parte c’è un concetto. Così poi il browser può richiedere una determinata rappresentazione di quel concetto. Nello specifico il browser richiede la rappresentazione del concetto in forma di pagina web.

Moglie: Che altre forme di rappresentazione ci sono?

Ryan: Al momento le rappresentazioni sono una di quelle cose che non viene molto usata. Il più delle volte una risorsa ha una singola rappresentazione. Ma speriamo che le rappresentazioni siano usate sempre di più nel futuro perchè ci sono una bel pò di nuovi formati che stanno spuntando in giro.

Moglie: Per esempio?

Ryan: Beh…C’è questa cosa che la gente chiama “Web services”. Significa mille cose diverse per mille persone diverse ma il concetto base è che le macchine potrebbero usare il web così come lo fanno le persone.

Moglie: Un’altra di quelle cose robot?

Ryan: No, non sul serio. Non intendo dire che i robot staranno seduti alla scrivania a navigare sul web. Però i computer potrebbero usare gli stessi protocolli per scambiarsi messaggi tra di loro. Lo facciamo daun sacco di tempo ma nessuna delle tecniche che usiamo oggi funziona bene quando devi parlare a tutte le macchine del mondo.

Moglie: Perchè no?

Ryan: Perchè non erano pensate per funzionare in quel modo. Quando Fielding e i suoi amici hanno iniziato a costruire il web parlare con qualsiasi macchina in qualunque parte del mondo era un requisito indispensabile. La gran parte delle tecniche che usiamo oggi per far comunicare i computer non soddisfano questo requisito. Avevamo giusto bisogno di parlare con un piccolo gruppo di macchine.

Moglie: E adesso abbiamo bisogno di parlare con tutte le macchine del mondo?

Ryan: Si e c’e’ dell’altro! Abbiamo bisogno di parlare con tutte le macchine di tutte le cose che sono contenute in tutte le altre macchine. Per cui abbiamo bisogno di un modo per parlare a una macchina di una risorsa che potrebbe essere contenuta in una terza macchina.

Moglie: Che cosa?!??!?!

Ryan: Diciamo che stai parlando con tua sorella che vuole che gli presti l’aspirapolvere o qualsiasi altra cosa. Ma tu non ce l’hai, ce l’ha tua madre. Così dici a tua sorella di prenderlo da tua madre. Cose come questa succedono continuamente nella vita reale e succedono continuamente anche quando le macchine si mettono a dialogare.

Moglie: E come fanno le macchine a dirsi tra di loro dove sono le cose?

Ryan: Usando l’URL ovviamente. Se tutte le cose di cui le macchine hanno bisogno di parlare hanno un URL, ecco che hai creato l’equivalente di un nome, per le macchine.
Il fatto che io e te ci siamo messi d’accordo su come dare i nomi alle cose è abbastanza importante, no?

Moglie: certo.

Ryan: Le macchine non hanno un sistema universale per dare i nomi, ecco perchè fanno schifo.
Ogni linguaggio di programmazione, database o qualsiasi altra cosa ha il suo proprio modo di dare nomi alle cose. Ecco perchè l’URL è così importante.
Permette a ognuno di questi sistemi di parlare agli altri dei loro nomi.

Moglie: Ma quando io cerco una pagina web, non la vedo a questo modo.

Ryan: Nessuno lo fa. Eccetto Fielding e una manciata di altre persone. Ecco perchè le macchine fanno ancora schifo.

Moglie: E che mi dici di verbi, aggettivi e pronomi?

Ryan: Buffo che tu me l’abbia chiesto, perchè questo è un altro degli aspetti fondamentali di REST.
O almeno i verbi lo sono.

Moglie: Stavo scherzando!

Ryan: Scherzavi ma in realtà non è uno scherzo. I verbi sono importanti. C’è un concetto potente nella programmazione e nell’informatica teorica chiamato “polimorfismo”.
E’ un modo difficile di dire che a nomi differenti è possibile applicare lo stesso verbo.

Moglie: Non capisco.

Ryan: Beh…guarda il tavolino da caffè. Quali sono i nomi? Tazza, vassoio, giornale, telecomando. Adesso, quali sono alcune cose che puoi fare con ognuna di queste cose?

Moglie: Non capisco…

Ryan: Puoi “prenderle” giusto? Puoi raccoglierle, puoi buttarle per terra. Puoi bruciarle. Puoi applicare esattamente questi stessi verbi a tutti gli oggetti che ci sono li sopra.

Moglie: Ok, e allora?

Ryan: Beh, è importante. Cosa succederebbe se invece di poter dire “prendi il giornale”, “prendi la tazza” e “prendi il telecomando”, avessimo bisogno di un verbo differente per ognuno dei nomi? Se non potessi usare universalmente la parola “prendi” ma dovessi pensare a una parola diversa per ogni possibile combinazione di nome e verbo.

Moglie: E’ assurdo!

Ryan: Si, lo è. Le nostri menti sono sveglie abbastanza da sapere che gli stessi verbi possono essere applicati a diversi nomi. Alcuni verbi sono più specifici di altri e si applicano solo a determinati nomi. Per esempio non posso “guidare una tazza” e “bere un’automobile”. Ma alcuni verbi come PRENDERE, METTERE e CANCELLARE (GET, PUT, DELETE) sono quasi universali.

Moglie: Non puoi CANCELLARE una tazza!

Ryan: Si va beh, però puoi buttarla via. Era un altro scherzo vero?

Moglie: Si.

Ryan: Ad ogni modo HTTP, quel protocollo che Fielding e i suoi amici hanno inventato, è tutto centrato intorno all’applicare verbi ai nomi. Quando vai su una pagina web il browser fa un HTTP PRENDI (HTTP GET) sull’URL che hai scritto e ottiene in cambio una pagina web.

Le pagine di solito hanno delle immagini giusto? Le immagini sono risorse a se.
La pagina web si limita a specificare le URL alle immagini, il browser va e fa altri HTTP PRENDI (HTTP GET)
finchè non ha ottenuto tutte le risorse; alla fine mostra la pagina web completa. Ma la cosa più importante qui è che noi molto diversi tra loro possono essere trattati allo stesso modo. Che il nome sia un immagine, un testo, un video, un mp3, una presentazione, o qualsiasi cosa non importa. posso PRENDERE (GET) tutte queste cose nello stesso modo, dato il loro URL.

Moglie: Pare proprio che PRENDERE (GET) sia un verbo importante.

Ryan: E lo è. Specialmente quando usi un browser web perchè i browser si limitano più o meno a PRENDERE cose. Non hanno molti altri tipi di interazione con le risorse. Questo è un problema perchè ha portato le persone a pensare che HTTP serva solo a PRENDERE cose. Ma in realtà HTTP è un protocollo generico per applicare verbi ai nomi.

Moglie: Fantastico. Ma continuo a non vedere come questo possa cambiare le cose. Che tipi di nomi e verbi vorresti?

Ryan: Beh, i nomi ci sono ma non sono nel formato adatto.

Pensa a quando stai sfogliando il catalogo di amazon.com per cercarmi cose da regalarmi a natale. Immagina che ognuno di quei prodotti sia un nome. Se fossero disponibili rappresentazioni che le macchine fossero in grado di comprendere, potresti fare un sacco di belle cose.

Moglie: Perchè una macchina non è capace di comprendere una normale pagina web?

Ryan: Perchè le pagine web sono pensate per essere comprese dalle persone. A una macchina non interessano la grafica e lo stile. Le macchine hanno più o meno bisogno solamente dei dati. Idealmente un URL potrebbe avere una rappresentazione leggibile dalle persone e una rappresentazione leggibile dalle macchine. Quando una macchina PRENDE la risorsa, chiederà la rappresentazione leggibile dalle macchine. Quando un browser PRENDE la risorsa per una persona, chiederà quella leggibile dalle persone.

Moglie: Quindi la gente dovrebbe pubblicare delle versioni proprie pagine leggibili dalle macchine ?

Ryan: Se fossero utili.
Senti, stiamo parlando di questa cosa con un sacco di astrazioni. Che ne dici di fare un esempio reale?
Sei un insegnante, scommetto che a scuola hai un grande computer o più probabilmente tre o quattro computer per gestire gli studenti: in che classe sono, che corsi stanno seguendo, i loro contatti di emergenza, informazioni sui libri che utilizzano, etc.
Se il sistema funzionasse sul web ci sarebbe probabilmente un URL per ognuno dei nomi coinvolti: studente, insegnante, classe, libro, aula.
Oggi, PRENDERE l’URL con il browser ti darebbe una pagina web.
Se ci fosse una rappresentazione leggibile dalle macchine per ogni URL sarebbe semplice attaccare al sistema nuovi strumenti, perchè
tutte quelle informazioni sarebbero utilizzabili in modo standard. Diventerebbe anche parecchio più semplice parlare con gli altri sistemi. Potresti costruire un sistema statale capace di parlare con ognuno dei sistemi scolastici per ottenere un’aggregazione di tutti i voti agli esami. Le possibilità sarebbero davvero infinite.

Ognuno di questi sitemi potrebbe PRENDERE le informazioni dagli altri utilizzando un semplice HTTP PRENDI (HTTP GET). Se un sistema avesse bisogno di aggiungere qualcosa a un altro sistema userebbe un HTTP METTI (HTTP PUT). L’unica cosa che rimane da capire è che formato dovrebbero avere i dati.

Moglie: Quindi è questo quello su cui adesso la gente sta lavorando? Decidere che formato dovrebbero avere i dati?

Ryan: Purtroppo no. La maggior parte sono occupati a scrivere strati di specifiche complesse per fare le stesse cose in un modo diverso che è non è nemmeno lontanamente altrettanto utile o eloquente. I nomi non sono universali e i verbi non sono polimorfici. Stiamo buttando via decadi di sperimentazione sul campo e tecniche dimostrate per ricominciare da capo con qualcosa che sembra molto simile a sistemi che hanno già fallito in passato. Stiamo utilizzando HTTP solo perchè ci aiuta a discutere un po’ meno con il personale addetto alla rete e alla sicurezza. Stiamo barattando la semplicità con le perline colorate.

Moglie: Perche’?

Ryan: Non ne ho idea.

Moglie: Perche tu non dici qualcosa?

Ryan: Forse lo farò.

Leave a Reply

Close
E-mail It