Ir al contenido principal

Como le expliqué REST a mi esposa

Esta es una copia de la traducción del maravilloso artículo escrito en diciembre de 2004 por Ryan Tomayko en el que, en forma de una conversación con su esposa, explica qué es REST

Desafortunadamente, hace poco tiempo el propio Ryan Tomayko decidió borrar el artículo porque no se sentía cómodo con una posible interpretación discriminatoria en los roles representados por los dos actores.

No puedo estar de acuerdo con esto. Ese artículo expresa algo natural y nos muestra a un ser muy inteligente, una mujer, que hace preguntas que muestran entendimiento, razonamiento y curiosidad. Darle un giro machista es simplemente otra estupidez de estos openmind forzados, hipócritas  e igualadores de oficio.

Me niego a aceptar que esta obra muera. La dejo aquí en honor a un trabajo bien hecho.





  • Domingo 12 de Diciembre de 2004



  • Esposa: Quién es Roy Fielding?
  • Ryan: Un señor muy inteligente.
  • Wife: Oh? Y qué hizo?
  • Ryan: Ayudo a escribir los primeros servidores web y luego realizó una tonelada de trabajos de investigación explicando por qué la web funciona como funciona. Su nombre figura en la especificación del protocolo que se usa para descargar páginas web de los servidores a tu navegador.
  • Esposa: Y cómo funciona?
  • Ryan: La web?
  • Esposa: Si.
  • Ryan: Hmmm. Bueno, es algo maravilloso en realidad. Y lo más gracioso es que está muy subvalorado. El protocolo del que estoy hablando, HTTP, puede hacer un montón de cosas interesantes que la gente ignora por alguna razón.
  • Esposa: Te refieres a http como en el comienzo de lo que se escribe en el navegador web?
  • Ryan: Si. La primera parte le dice al navegador qué protocolo usar. Eso que pones allí es uno de los descubrimientos más importantes en la historia de la computación.
  • Esposa: Por qué?
  • Ryan: Porque es capaz de describir la ubicación de algo en cualquier lugar del mundo desde cualquier otro lugar en el mundo. Es la base fundacional de la web. Es como las coordenadas GPS del conocimiento y la información.
  • Esposa: Para páginas web?
  • Ryan: Para cualquier cosa, en realidad. Este señor, Roy Fielding, habla mucho sobre estas cosas en esos trabajos de investigación de los que hablaba antes. La web está construida sobre un estilo arquitectónico llamado REST. REST provee la definición de un recurso, que es a lo que estas cosas apuntan.
  • Esposa: Una página web es un recurso?
  • Ryan: Más o menos. Una página web es una representación de un recurso. Los recursos son solo conceptos. URLs, eso que escribes en el navegador...
  • Esposa: Yo se lo que es un URL...
  • Ryan: Ah, bueno. Esos le indican al navegador que hay un concepto en alguna parte. El navegador puede entonces pedir una representación específica de ese concepto. Específicamente, el navegador pide una representación en forma de página web del concepto.
  • Esposa: Qué otra clase de representaciones existen?
  • Ryan: En realidad, las representaciones son una de esas cosas que no se usan demasiado. En la mayoría de los casos existe solo una representación de un recurso, pero tenemos la esperanza de que las representaciones se usen mas en el futuro porque hay una serie de nuevos formatos apareciendo por todas partes.
  • Esposa: Como cuales?
  • Ryan: Hmm. Bueno, existe este concepto que la gente llama Servicios Web. Significa muchas cosas diferentes para mucha gente diferente, pero el concepto básico es que las máquinas podrían usar la web de la misma manera que la gente lo hace.
  • Esposa: Esto es otra de esas cosas sobre robots?
  • Ryan: No, no realmente. No quiero decir que las máquinas se vayan a sentar en el escritorio y navegar por la web, pero las computadores pueden usar esos mismos protocolos para enviar mensajes ida y vuelta entre ellas.
    Hace mucho tiempo que hacemos esto, pero ninguna de las técnicas que utilizamos hoy en día funcionan bien cuando necesitas hablarle a cualquier máquina en el mundo.
  • Esposa:Por qué no?
  • Ryan: Porque no fueron diseñadas para ser usadas así. Cuando Fielding y sus amigos comenzaron construyendo la web, la capacidad de dialogar con cualquier máquina en cualquier parte del mundo fue primordial. La mayoría de las técnicas que usamos en el trabajo para hacer que las computadoras dialoguen no tienen este tipo de requerimientos. Solo necesitas comunicarte con un grupo reducido de máquinas.
  • Esposa:Y ahora necesitas comunicarte con todas las máquinas?
  • Ryan: Si, y más. Necesitamos ser capaces de comunicarnos con todas las máquinas sobre todo lo que hay en las demás. Entonces necesitamos alguna forma de que una máquina le diga a otra sobre un recurso que puede estar en quizá otra máquina.
  • Esposa: Qué?
  • Ryan: Imaginemos que estás hablando con tu hermana y ella pide prestada la escoba o algo. Pero no la tienes, tu madre la tiene. Entonces le dices a tu hermana que la tome de tu madre. Esto pasa todo el tiempo en la vida real y pasa todo el tiempo cuando las máquinas se comunican también.
  • Entonces cómo hacen las máquinas para decirle a las otras dónde están las cosas?
  • La URL, por supuesto. Si todo lo que las máquinas necesitan comunicar tiene su correspondiente URL, has creado el equivalente a un sustantivo para una máquina. Entonces tú, yo y el resto del mundo hemos acordado en que hablar con sustantivos en cierta forma es bastante importante, no?
  • Esposa: Claro
  • Ryan: Las máquinas no tienen un sustantivo universal - es por eso que apestan. Cada lenguaje de programación, base de datos, u otro tipo de sistema tiene su forma de hablar sobre los sustantivos. Es por eso que la URL es tan importante. Deja a todos estos sistemas comunicarle a los demás sobre los sustantivos de los otros.
  • Esposa: Pero cuando estoy mirando una página web, yo no pienso de esa manera.
  • Ryan: Nadie lo hace. Excepto Fielding y un puñado de personas. Es por eso que las máquinas aún apestan.
  • Esposa: Y qué hay de los verbos, pronombres y adjetivos?
  • Ryan: Es gracioso que lo preguntes porque ese es otra gran característica de REST. Bien, los verbos los son de todas maneras.
  • Esposa: Estaba bromeando.
  • Ryan: Fue un chiste divertido pero no es para nada un chiste. Los verbos son importantes. Existe un concepto muy poderoso en programación llamado polimorfismo. Es una manera muy geek de decir que distintos sustantivos tienen el mismo verbo aplicado a ellos.
  • Esposa: No lo entiendo
  • Ryan: Bueno... mira la mesita de café. ¿Cuales son los sustantivos? Taza, cenicero, periódico, control remoto. Ahora, ¿qué tipo de cosas podrías hacerle a todas esas cosas?
  • Esposa:No lo entiendo...
  • Ryan: Puedes agarrarlas, ¿no? Puedes levantarlas. Puedes golpearlas. Puedes quemarlas. Puedes aplicar esos mismos verbos a cualquiera de los objetos que están allí.
  • Esposa: Ok, ¿entonces?
  • Ryan: Bueno, eso es importante. ¿Qué pasaría si en vez de ser capaz de decirte "agarra la taza" y "agarra el periódico" y "agarra el control", qué pasaría si necesitáramos un verbo diferente para cada uno de los sustantivos? Yo no podría utilizar la palabra "tomar" universalmente, en vez de eso debería crear una palabra para cada combinación verbo/sustantivo.
  • Esposa: |Wow! Eso es bizarro
  • Ryan: Si, lo es. Nuestros cerebros son de alguna manera lo suficientemente inteligentes para saber que los mismos verbos pueden aplicarse a sustantivos diferentes. Algunos verbos son más específicos que otros y sólo se pueden aplicar a un conjunto pequeño de sustantivos. Por ejemplo, yo no puedo conducir una taza y no puedo beber un auto. Pero otros verbos son casi universales como obtener (GET), poner (PUT) y borrar (DELETE)
  • Esposa: No puedes borrar una taza
  • Ryan: Bueno, es verdad, pero podrías tirarla. Eso fue otro chiste, ¿verdad?
  • Esposa: Si
  • Ryan: De todas formas, HTTP-este protocolo que Fielding y sus amigos crearon- se trata de aplicar verbos a sustantivos. Por ejemplo, cuando accedes a una página web, el navegador hace un HTTP GET a la URL que introduces y vuelve con una página web
  • Las páginas web suelen tener imágenes, ¿no? Estos son recursos separados. La página web sólo especifica las URLs de estas imágenes y el navegador va y realiza más HTTP GETs hasta que todos los recursos son obtenidos y la página web se muestra. Pero lo que nos importa aquí es que sustantivos de distinto tipo pueden ser tratados de la misma forma. Ya sea una imagen, texto, video, mp3, un pasador de fotos, lo que sea. Yo puedo obtener (GET) a cualquiera de ellos de la misma forma mediante una URL.
  • Esposa: Suena como que GET es un verbo bastante importante
  • Ryan: Lo es. Especialmente cuando estás usando un navegador web, ya que los navegadores la mayoría del tiempo obtienen cosas. No hacen muchas otras cosas al interactuar con recursos. Esto es un problema ya que mucha gente asumió que HTTP es sólo para obtener cosas. Pero HTTP es un protocolo multi propósito para aplicar verbos a sustantivos.
  • Esposa: Genial. Pero continúo sin ver como esto cambia algo. ¿Qué clase de sustantivos y verbos quieres?
  • Ryan: Bueno, los sustantivos están ahí pero no el formato adecuado.
  • Piensa cuando estás navegando amazon.com y buscando cosas para comprarme en navidad. Imagina cada producto como un sustantivo. Ahora, si ellos estuvieran disponibles como una representación que cada máquina pueda entender, podrías hacer un montón de cosas interesantes.
  • Esposa: ¿Por qué una máquina no puede entender una página web normal?
  • Ryan: Porque las páginas web están diseñadas para ser entendidas por personas. Una máquina no está interesada en la diagramación y el estilo. Ellas necesitan sólo la información. Idealmente, cada URL debería tener una representación legible por humanos y otra para máquinas. Cuando una máquina realiza un GET sobre el recurso, pedirá por el legible para máquinas. Cuando un navegador realiza un GET sobre un recurso para un humano, pedirá la versión legible para humanos.
  • Esposa: ¿Entonces las personas deberían realizar la versión para máquinas para todas sus páginas?
  • Ryan: Si esto vale la pena.
  • Mira, estuvimos hablando de esto con mucha abstracción. Qué tal si tomamos un ejemplo real. Tu eres una maestra, apuesto a que en la escuela tienen un gran sistema, o quizá tres o cuatro sistemas, que permiten administrar estudiantes: en qué clases están inscriptos, las notas que obtuvieron, contactos de emergencia, información sobre el material de lectura, etc. Si los sistemas están basados en una plataforma web, entonces probablemente exista una URL para cada uno de los sustantivos involucrados: estudiante, maestro, clase, libro, aula, etc. Ahora mismo, obteniendo la URL a través de un navegador nos da una página web. Si hubiese una representación para máquinas de cada URL, entonces podría ser trivial generar nuevas herramientas en el sistema porque toda esta información sería consumible en una manera estándar. También sería bastante más fácil que cada uno de estos sistemas dialogue entre sí. O, podrías construir un sistema para la provincia o todo el estado que fuese capaz de dialogar con los sistemas de cada colegio y recolectar puntajes de los exámenes. Las posibilidades son infinitas.
  • Cada uno de los sistemas obtendría la información del otro utilizando simplemente HTTP GET. Si alguno necesita agregar algo a otro, puede utilizar HTTP POST. Si alguno quiere actualizar algo en otro, usaría un HTTP PUT. Lo único que deberías saber es cómo debería ser la información.
  • Esposa: ¿Entonces esto es lo que están haciendo tú y los demás programadores ahora? ¿Decidiendo cómo la información debería ser?
  • Ryan: Tristemente, no. En vez de eso, la gran mayoría se mantiene ocupada escribiendo capas de especificaciones complejas para hacer esto en una forma diferente que no es tan útil o elocuente. Los sustantivos no son universales y los verbos no son polimórficos. Estamos desechando décadas de uso en el mundo real y técnicas probadas y comenzando de nuevo con algo que se parece bastante a otros sistemas que fallaron en el pasado. Estamos usando HTTP pero solo porque esto nos ayuda a dialogar con nuestra red y menos con la gente de seguridad. Estamos negociando simplicidad por herramientas y asistentes.
  • Esposa: ¿Por qué?
  • Ryan: No tengo idea
  • Esposa: ¿Por qué no dices algo?
  • Ryan: Tal vez lo haga

Comentarios

  1. Dejo otro enlace de interés https://ocubom.wordpress.com/2013/06/01/como-le-explicamos-rest-a-nuestros-hijos/

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

El Melange todavía corre

Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer. Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido. Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca. Estos fueron mis argumentos:

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda .  El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación , y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación . Así que, como ya es costumbre, manos a las sobras…

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso

Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada. Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento.  Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida. En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM. Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita. Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera. Así que manos a l