Moglie: chi è Roy Fielding?
Ryan: Qualcuno. Lui è intelligente.
Moglie: Oh? Cosa ha fatto?
Ryan: Ha aiutato a scrivere i primi web server e poi ha fatto molte ricerche per spiegare perché il web funziona così. Il suo nome è nelle specifiche del protocollo utilizzato per ottenere pagine dai server al browser.
Moglie: come funziona?
Ryan: Il web?
Moglie: Sì.
Ryan: Hmm. Bene, è davvero davvero fantastico. E la cosa divertente è che è tutto molto sottovalutato. Il protocollo di cui parlavo, HTTP, è capace di ogni sorta di roba ordinata che la gente ignora per qualche motivo.
Moglie: Intendi http come l'inizio di ciò che scrivo nel browser?
Ryan: Sì. Quella prima parte indica al browser quale protocollo utilizzare. Quelle cose che scrivi lì sono una delle scoperte più importanti nella storia dell'informatica.
Moglie: Perché?
Ryan: Perché è in grado di descrivere la posizione di qualcosa in qualsiasi parte del mondo da qualsiasi parte del mondo. È il fondamento del web. Puoi pensarlo come coordinate GPS per conoscenza e informazioni.
Moglie: per le pagine Web?
Ryan: Per davvero. Quel ragazzo, Roy Fielding, parla molto di ciò che indicano quelle cose in quella ricerca di cui stavo parlando. Il web è costruito su uno stile architettonico chiamato REST. REST fornisce una definizione di una risorsa, che è ciò che queste cose indicano.
Moglie: una pagina web è una risorsa?
Ryan: Un po '. Una pagina Web è una rappresentazione di una risorsa. Le risorse sono solo concetti. URL: quelle cose che digiti nel browser ...
Moglie: so cos'è un URL ..
Ryan: Oh, giusto. Questi dicono al browser che esiste un concetto da qualche parte. Un browser può quindi chiedere una rappresentazione specifica del concetto. In particolare, il browser richiede la rappresentazione della pagina Web del concetto.
Moglie: quali altri tipi di rappresentazioni ci sono?
Ryan: In realtà, le rappresentazioni sono una di queste cose che non si abituano molto. Nella maggior parte dei casi, una risorsa ha una sola rappresentazione. Ma speriamo che le rappresentazioni vengano utilizzate più in futuro perché ci sono un sacco di nuovi formati che spuntano ovunque.
Moglie: come cosa?
Ryan: Hmm. Bene, c'è questo concetto che le persone chiamano i servizi Web. Significa molte cose diverse per molte persone diverse, ma il concetto di base è che le macchine potrebbero usare il web proprio come fanno le persone.
Moglie: è un'altra cosa robot?
Ryan: No, non proprio. Non voglio dire che le macchine siedano alla scrivania e navighino sul web. Ma i computer possono usare quegli stessi protocolli per inviare messaggi avanti e indietro. Lo facciamo da molto tempo, ma nessuna delle tecniche che usiamo oggi funziona bene quando devi essere in grado di parlare con tutte le macchine di tutto il mondo.
Moglie: Perché no?
Ryan: Perché non sono stati progettati per essere usati così. Quando Fielding e i suoi amici hanno iniziato a costruire la rete, essere in grado di parlare con qualsiasi macchina in qualsiasi parte del mondo era una preoccupazione primaria. La maggior parte delle tecniche che usiamo al lavoro per convincere i computer a parlare tra loro non aveva questi requisiti. Dovevi solo parlare con un piccolo gruppo di macchine.
Moglie: E ora devi parlare con tutte le macchine?
Ryan: Sì - e altro ancora. Dobbiamo essere in grado di parlare con tutte le macchine di tutto ciò che è presente su tutte le altre macchine. Quindi abbiamo bisogno di un modo per far dire a una macchina un'altra macchina su una risorsa che potrebbe trovarsi su un'altra macchina.
Moglie: cosa?
Ryan: Diciamo che stai parlando con tua sorella e lei vuole prendere in prestito lo spazzino o qualcosa del genere. Ma tu non ce l'hai - tua mamma ce l'ha. Quindi dici a tua sorella di prenderlo invece da tua madre. Questo succede sempre nella vita reale e succede sempre quando anche le macchine iniziano a parlare.
Moglie: Allora, come fanno le macchine a dirsi dove sono le cose?
Ryan: L'URL, ovviamente. Se tutto ciò di cui le macchine devono parlare ha un URL corrispondente, hai creato l'equivalente macchina di un sostantivo. Che tu ed io e il resto del mondo abbiamo concordato di parlare dei sostantivi in un certo modo è piuttosto importante, eh?
Moglie: Sì.
Ryan: Le macchine non hanno un nome universale - ecco perché fanno schifo. Ogni linguaggio di programmazione, database o altro tipo di sistema ha un modo diverso di parlare dei nomi. Ecco perché l'URL è così importante. Permettono a tutti questi sistemi di raccontarsi l'un l'altro dei nomi degli altri.
Moglie: Ma quando guardo una pagina web, non la penso così.
Ryan: Nessuno lo fa. Tranne Fielding e una manciata di altre persone. Ecco perché le macchine fanno ancora schifo.
Moglie: Che dire di verbi, pronomi e aggettivi?
Ryan: Divertente che mi hai chiesto perché è un altro aspetto importante di REST. Bene, i verbi lo sono comunque.
Moglie: stavo solo scherzando.
Ryan: Era uno scherzo divertente ma in realtà non è affatto uno scherzo. I verbi sono importanti. C'è un concetto potente nella programmazione e nella teoria CS chiamato polimorfismo. È un modo geniale di dire che nomi diversi possono avere lo stesso verbo applicato a loro.
Moglie: Non capisco.
Ryan: Beh ... guarda il tavolino. Quali sono i nomi? Tazza, vassoio, giornale, telecomando. Ora, quali sono alcune cose che puoi fare per tutte queste cose?
Moglie: Non capisco ...
Ryan: Puoi prenderli, giusto? Puoi raccoglierli. Puoi rovesciarli. Puoi bruciarli. Puoi applicare gli stessi verbi esatti a qualsiasi oggetto seduto lì.
Moglie: Okay ... quindi?
Ryan: Beh, è importante. E se invece di essere in grado di dirti "prendi la tazza", "prendi il giornale" e "prendi il telecomando"; e se invece avessimo bisogno di elaborare verbi diversi per ciascuno dei nomi? Non ho potuto usare la parola "get" universalmente, ma invece ho dovuto inventare una nuova parola per ogni combinazione verbo / sostantivo.
Moglie: Wow! Quello è strano.
Ryan: Sì, lo è. Il nostro cervello è in qualche modo abbastanza intelligente da sapere che gli stessi verbi possono essere applicati a molti nomi diversi. Alcuni verbi sono più specifici di altri e si applicano solo a un piccolo set di nomi. Ad esempio, non posso guidare una tazza e non posso bere una macchina. Ma alcuni verbi sono quasi universali come GET, PUT e DELETE.
Moglie: non puoi ELIMINARE una tazza.
Ryan: Bene, okay, ma puoi buttarlo via. Era un'altra battuta, vero?
Moglie: Sì.
Ryan: Comunque, HTTP - questo protocollo creato da Fielding e dai suoi amici - riguarda l'applicazione dei verbi ai nomi. Ad esempio, quando si accede a una pagina Web, il browser esegue un HTTP GET sull'URL digitato e viceversa arriva una pagina Web.
Le pagine Web di solito contengono immagini, giusto? Quelle sono risorse separate. La pagina Web specifica solo gli URL delle immagini e il browser passa e fa più HTTP GET su di esse fino a quando non vengono ottenute tutte le risorse e viene visualizzata la pagina Web. Ma la cosa importante qui è che tipi di nomi molto diversi possono essere trattati allo stesso modo. Se il nome è un'immagine, un testo, un video, un mp3, una presentazione o altro. Posso ottenere tutte queste cose allo stesso modo dato un URL.
Moglie: Sembra che GET sia un verbo piuttosto importante.
Ryan: Lo è. Soprattutto quando si utilizza un browser Web perché i browser sono praticamente cose di JustGET. Non fanno molti altri tipi di interazione con le risorse. Questo è un problema perché ha portato molte persone a supporre che HTTP sia solo per OTTENERE. Ma HTTP è in realtà un protocollo di scopo generale per l'applicazione dei verbi ai nomi.
Moglie: fantastica. Ma ancora non vedo come questo cambi qualcosa. Che tipo di nomi e verbi vuoi?
Ryan: Beh, i sostantivi sono lì ma non nel formato giusto.
Pensa a quando navighi su amazon.com alla ricerca di cose da comprarmi per Natale. Immagina ciascuno dei prodotti come nomi. Ora, se fossero disponibili in una rappresentazione che una macchina potesse capire, potresti fare molte cose pulite.
Moglie: Perché una macchina non può capire una normale pagina Web?
Ryan: Perché le pagine Web sono progettate per essere comprese dalle persone. A una macchina non interessa il layout e lo stile. Le macchine praticamente hanno solo bisogno dei dati. Idealmente, ogni URL avrebbe una rappresentazione leggibile dall'uomo e una lettura leggibile dalla macchina. Quando una macchina OTTIENE la risorsa, chiederà quella leggibile dalla macchina. Quando un browser OTTIENE una risorsa per un essere umano, chiederà quello leggibile dall'uomo.
Moglie: Quindi le persone dovrebbero creare formati macchina per tutte le loro pagine?
Ryan: Se fosse prezioso.
Senti, ne abbiamo parlato con molta astrazione. Che ne dici di prendere un esempio reale. Sei un insegnante - a scuola scommetto che hai un grande sistema informatico, o tre o quattro sistemi informatici più probabili, che ti consentono di gestire gli studenti: in che classe frequentano, in che classe stanno ricevendo, contatti di emergenza, informazioni sui libri a cui insegnate, ecc. Se i sistemi sono basati sul web, allora probabilmente c'è un URL per ciascuno dei nomi coinvolti qui: studente, insegnante, classe, libro, stanza, ecc. In questo momento, ottenere l'URL il browser ti dà una pagina web. Se esistesse una rappresentazione leggibile automaticamente per ciascun URL, sarebbe banale agganciare nuovi strumenti al sistema perché tutte quelle informazioni sarebbero consumabili in modo standard. Inoltre renderebbe un po 'più semplice la conversazione tra i vari sistemi. Oppure, potresti costruire un sistema statale o nazionale in grado di parlare con ciascuno dei singoli sistemi scolastici per raccogliere i punteggi dei test. Le possibilità sono infinite.
Ciascuno dei sistemi otterrebbe informazioni l'uno dall'altro utilizzando un semplice HTTP GET. Se un sistema deve aggiungere qualcosa a un altro sistema, utilizza un POST HTTP. Se un sistema desidera aggiornare qualcosa in un altro sistema, utilizza un HTTP PUT. L'unica cosa che resta da capire è come dovrebbero apparire i dati.
Moglie: Quindi questo è ciò su cui tu e tutti i computer state lavorando ora? Decidi come dovrebbero apparire i dati?
Ryan: Purtroppo no. Invece, la grande maggioranza è impegnata a scrivere livelli di specifiche complesse per fare queste cose in un modo diverso che non è altrettanto utile o eloquente. I sostantivi non sono universali e i verbi non sono polimorfici. Stiamo buttando via decenni di utilizzo reale sul campo e tecniche collaudate e ricominciando da capo con qualcosa che assomiglia molto ad altri sistemi che hanno fallito in passato. Stiamo usando HTTP ma solo perché ci aiuta a parlare di meno con la nostra rete e con le persone della sicurezza. Stiamo scambiando semplicità con strumenti e maghi appariscenti.
Moglie: Perché?
Ryan: Non ne ho idea.
Moglie: Perché non dici qualcosa?
Ryan: Forse lo farò.