Como le expliqué REST a mi esposa

Saturday 22 de March de 2008

En realidad, cómo Ryan Tomayko le explicó REST a su esposa… Yo solo lo traduje.

Esposa: ¿Quién es Roy Fielding?

Ryan: Un tipo. Es inteligente.

Esposa: ¿En serio? ¿Qué hizo?

Ryan: Ayudó a escribir los primeros servidores web, y después hizo un montón de investigaciones, explicando por qué la web funciona como funciona. Su nombre aparece en la especificación del protocolo que se usa para pasar páginas de los servidores a tu navegador.

Esposa: ¿Cómo funciona?

Ryan: ¿La web?

Esposa: Sí.

Ryan: Eh… es todo bastante sorprendente, realmente. Y lo gracioso es que está muy subestimado. El protocolo del que estaba hablando, HTTP, es capaz de un montonazo de cosas que la gente ignora por algún motivo.

Esposa: ¿http como lo que escribo en la dirección en el navegador?

Ryan: Sí. La primera parte le dice al navegador qué protocolo usar. Eso que escribís ahí es uno de los descubrimientos más importantes en la historia de la computación.

Esposa: ¿Por qué?

Ryan: Porque puede describir la ubicación de algo en cualquier lugar del mundo, desde cualquier lugar del mundo. Es la base de la web. Podrías decir que son las coordenadas GPS del conocimiento y la información.

Esposa: ¿Para páginas web?

Ryan: Para cualquier cosa, realmente. Ese tipo, Roy Fielding, habla mucho acerca de a qué apuntan esas cosas en la investigación que te dije. La web está armada en un estilo arquitectural llamado REST. REST provee una definición de un recurso, que es a lo que apuntan esas cosas.

Esposa: ¿Una página web es un recurso?

Ryan: Casi. Una página es una representación de un recurso. Los recursos son solo conceptos. Las URLs—eso que escribís en el navegador…

Esposa: Sé lo que es una URL…

Ryan: Ah, cierto. Eso le dice al navegador que hay un concepto en algún lado. Un navegador puede, entonces, pedir una representación específica del concepto. Específicamente, un navegador pide la representación de página web de ese concepto.

Esposa: ¿Qué otros tipos de representación hay?

Ryan: Realmente, las representaciones son una de esas cosas que no se usan tanto. En la matoría de los casos, un recurso tiene una única representación. Pero esperamos que las representaciones se usen más en el futuro, porque hay un montón de formatos nuevos apareciendo por todos lados.

Esposa: ¿Por ejemplo?

Ryan: Mmm… Bueno, está este concepro que la gente llama Servicios Web. Significa un montón de cosas diferentes a un montón de gente diferente, pero el concepto básico es que las máquinas pueden usar la web igual que la gente.

Esposa: ¿Esto es otra de esas cosas de robots?

Ryan: No, no realmente. No quiero decir que las máquinas se van a sentar en el escritorio y navegar la web, pero las computadoras podrían usar esos protocolos para mandarse mensajes las unas a las otras. Hemos estado haciendo eso por mucho tiempo, pero ninguna de las técnicas que usamos hoy en día funcionan bien cuando necesitas hablar a todas las computadoras en todo el mundo.

Esposa: ¿Por qué?

Ryan: Porque no fueron diseñados para usarse así. Cuand Fielding y sus amigos empezaron a armar la web, poder hablar con cualquier máquina en cualquier lugar del mundo era de suma importancia. La matoría de las técnicas que usamos en el trabajo para hacer que las computadoras se hablen entre sí no tenían esos requerimientos; sólo necesitabas hablar con un pequeño grupo de computadoras.

Esposa: ¿Y ahora necesitas hablar con todas las máquinas?

Ryan: Sí, y más. Necesitamos ser capaces de hablar con todas las máquinas acerca de todas las cosas que están en todas las otras máquinas. Necesitamos una forma de hacer que una máquina le diga a otra acerca de un recurso que puede estar en una tercera máquina.

Esposa: ¿Qué?

Ryan: Imaginate que estás hablando con tu hermana, y ella te pide prestada tu escoba o algo, pero vos no la tenés, la tiene tu mamá. Entonces le decís a tu hermana que se la pida a ella. Esto pasa todo el tiempo en la vida real, y pasa todo el tiempo cuando las computadoras empiezan a hablar también.

Esposa: ¿Y cómo se dicen las computadoras dónde están las cosas?

Ryan: La URL, claro. Si todo sobre lo que las máquinas necesitan hablar tiene una URL asociada, creaste el equivalente para una máquina de un sustentivo. Que vos y yo y el resto del mundo nos pongamos de acuerdo en hablar sobre sustantivos de una cierta manera es bastante importante, ¿no?

Esposa: Sí.

Ryan: Las máquinas no tienen un sustantivo universal; por eso son un asco. Cada lenguaje de programación, base de datos, u otro tipo de sistemas tiene una forma distinta de hablar de sustantivos. Por eso la URL es tan importante; permite a todos estos sistemas hablar entre sí acerca de sus sustantivos.

Esposa: Pero cuando estoy navegando, no pienso en eso.

Ryan: Nadie lo hace. Excepto Fielding y un puñado de otras personas. Por eso las máquinas siguen siendo un asco.

Esposa: ¿Y qué de verbos y pronombres y adjetivos?

Ryan: Gracioso que preguntes, porque ese es otro gran aspecto del REST. Bueno, al menos los verbos.

Esposa: Era un chiste.

Ryan: Era un chiste gracioso, pero realmente no era un chiste. Los verbos son importantes. Hay un concepto poderoso en programación y la teoría ciencia de la computación llamado polimorfismo. Es una forma geek de decir que el mismo verbo se puede aplicar a diferentes sustantivos.

Esposa: No entiendo.

Ryan: Bueno… mirá la mesa. ¿Cuales son los sustantivos? Taza, bandeja, diario, control remoto. Ahora, ¿Qué son algunas de las cosas que podés hacer con todas esas cosas?

Esposa: No la agarro… [N.d.T.: Soy un capo con los juegos de palabras (?)]

Ryan: Podés agarrarlos, ¿ciero? Podes levantarlos, podés tumbarlos, podés quemarlos. Podés usar esos verbos exactamente en cualquiera de los objetos de ahí. [N.d.T: Está dificil tumbar un diario, pero... bueno.]

Esposa: Bueno… ¿y?

Ryan: Bueno, eso es importante. ¿Qué si en vez de poder pedirte “agarrá la taza” y “agarrá el diario” y “agarrá el control remoto” tuviera que usar un verbo distinto para cada sustantivo? No podría usar la palabra “agarrar” universalmente, sino que tendría que pensar en una nueva para cada combinación de verbo y sustantivo.

Esposa: ¡Guau! ¡Eso es raro!

Ryan: Sí, lo es. Nuestros cerebros son de alguna manera suficientemente inteligentes como para saber que los mismos verbos pueden aplicarse a muchos sustantivos diferentes. Por ejemplo, no puedo conducir una taza ni beber un auto, pero algunos verbos son casi universales, como GET [agarrar/pedir], PUT [poner], y DELETE [borrar].

Esposa: No podés borrar una taza…

Ryan: Bueno, claro, pero la podés tirar a la basura. ¿Ese era otro chiste, no?

Esposa: Sip.

Ryan: Entonces, HTTP —este protocolo que Fielding y sus amigos crearon— es todo acerca de aplicar verbos a sustantivos. Por ejemplo, cuando entrás en una página, el nevegador hace un HTTP GET en la URL que escribís, y lo que vuelve es una página web

Las páginas web suelen tener imágenes, ¿no? Esos son recursos separados. La página sólo especifica las URLs a las imágenes y el navegador hace más HTTP GET en ellas hasta que todos los recursos se obtienen y se muestra la página. Pero lo importante acá es que sustantivos muy diferentes pueden ser tratados de la misma manera. Sea el sustantivo una imagen, texto, video, un MP3, una presentación de diapositivas, o lo que sea, puedo obtener con GET todas esas páginas de la misma forma, dada una URL.

Esposa: Parece que GET es un verbo importante.

Ryan: Lo es. Especialmente cuando usas un navegador, porque los navegadores más que nada solo piden las cosas. No hacen muchas otras interacciones con los recursos. Esto es un problema, porque hizo que mucha gente asuma que HTTP es solo para lectura. Pero HTTP es en realidad un protocolo de propósito general para aplicar verbos a sustantivos.

Esposa: Lindo. Pero sigo sin ver cómo esto cambia nada. ¿Qué tipo de sustantivos y verbos querés?

Ryan: Bueno, los sustantivos están ahí, pero no en el formato apropiado.

Imaginate cuando estabas navegando en amazon.com buscando cosas para comprarme para navidad. Imaginate que cada producto es un sustantivo. Ahora, si estuvieran disponibles en una representación que una máquina pudiera entender, podrías hacer un monton de cosas interesantes.

Esposa: ¿Por qué una máquina no entiende una página web normal?

Ryan: Porque las páginas web están diseñadas para ser comprendidas por la gente. A una máquina no le importa la disposición y el estilo del contenido. Las máquinas básicamente sólo necesitan los datos. Idealmente, todas las URLs deberían tener una representación legible por humanos, y otra para máquinas. Cuando un navegador hace GET para pedir un recurso para un humano, pedirá la legible por humanos.

Esposa: Entonces. ¿Todos tendría que hacer formatos máquina de todas sus páginas?

Ryan: Si fuera valuable.

Mirá, estuvimos hablando de esto con un montón de abstracción. ¿Qué tal si tomamos un ejemplo real? Sos una maestra. En una escuela, me imagino que tendrás un gran sistema informático, o tres o cuatro sistemas, más seguramente, que te dejan manejar a tus estudiantes: en qué clases están, qué notas tienen, contactos de emergencia, información acerca de los libros que usás en el aula, etcétera. Si los sistemas esþan basados en web, probablemente hay una URL para cada uno de los sustantivos involucrados: alumno, maestro, clase, libro, aula, etcétera. Ahora mismo, pedir la URL mediante un navegador te devuelve una página web. Si hubiera una representación legible por la máquina para cada URL sería trivieal agregar nuevas herramientas al sistema, porque toda esa información sería consumible de forma estándar. También haría bastante más fácil que cada sistema se hable entre sí. O, podrías construir un sistema estatal o nacional que pueda hablar con cada uno de los sistemas escolares para obtener las calificaciones de las pruebas. Las posibilidades son ilimitadas.

Cada sistema obtendría información de los demás usando un simple HTTP GET. Si un sistema necesitara agregar algo a otro, usaría HTTP POST. Si quisiera actualizar algo, usaría HTTP PUT. Lo único que falta averiguar es qué forma tienen los datos.

Esposa: ¿Entonces en esto es lo que vos y todoa la gente de computadoras está trabajando? ¿Decidir la forma que los datos deberían tener?

Ryan: Desgraciadamente, no. Por el conntario, la matoría está trabajando escribiendo capas de especificaciones complejas para hacer cosas de una forma diferente que no es ni remotamente tan útil o elocuente. Los sustantivos no son universales ni los verbos polimorficos. Estamos tirando a la basura décadas de cosas que de verdad se usan y técnicas demostradas, y empezando de nuevo con alfo que se parece mucho a otros sistemas que fallaron en el pasado. Usamos HTTP, pero sólo porque nos ayuda a hablar menos con los encargados de redes y seguridad. Cambiamos simplicidad por herramientas llamativas y diseñadores automáticos.

Esposa: ¿Por qué?

Ryan: No tengo idea.

Esposa: ¿Por qué no decís algo?

Ryan: Quizá lo haga.

De paso, los N.d.T. no son “Nota del Traductor”, sino “Nota del Tordek”.

Original [Via]

Comentá:

XHTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>