• How I Explained REST to My Wife

  • How I Explained REST to My Wife

  • Como le expliqué REST a mi esposa

  • Sunday, December 12, 2004
  • Domingo 12 de Diciembre de 2004
  • Wife: Who is Roy Fielding?
  • Esposa: Quién es Roy Fielding?
  • Ryan: Some guy. He's smart.
  • Ryan: Un señor muy inteligente.
  • Wife: Oh? What did he do?
  • Wife: Oh? Y qué hizo?
  • Ryan: He helped write the first web servers and then did a ton of research explaining why the web works the way it does. His name is on the specification for the protocol that is used to get pages from servers to your browser.
  • 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.
  • Wife: How does it work?
  • Esposa: Y cómo funciona?
  • Ryan: The web?
  • Ryan: La web?
  • Wife: Yeah.
  • Esposa: Si.
  • Ryan: Hmm. Well, it's all pretty amazing really. And the funny thing is that it's all very undervalued. The protocol I was talking about, HTTP, it's capable of all sorts of neat stuff that people ignore for some reason.
  • 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.
  • Wife: You mean http like the beginning of what I type into the browser?
  • Esposa: Te refieres a http como en el comienzo de lo que se escribe en el navegador web?
  • Ryan: Yeah. That first part tells the browser what protocol to use. That stuff you type in there is one of the most important breakthroughs in the history of computing.
  • 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.
  • Wife: Why?
  • Esposa: Por qué?
  • Ryan: Because it is capable of describing the location of something anywhere in the worldfrom anywhere in the world. It's the foundation of the web. You can think of it like GPS coordinates for knowledge and information.
  • 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.
  • Wife: For web pages?
  • Para páginas web?
  • Ryan: For anything really. That guy, Roy Fielding, he talks a lot about what those things point to in that research I was talking about. The web is built on an architectural style called REST. REST provides a definition of a resource, which is what those things point to.
  • 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.
  • Wife: A web page is a resource?
  • Esposa: Una página web es un recurso?
  • Ryan: Kind of. A web page is a representation of a resource. Resources are just concepts. URLs--those things that you type into the browser...
  • 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...
  • Wife: I know what a URL is..
  • Esposa: Yo se lo que es un URL...
  • Ryan: Oh, right. Those tell the browser that there's a concept somewhere. A browser can then go ask for a specific representation of the concept. Specifically, the browser asks for the web page representation of the concept.
  • 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.
  • Wife: What other kinds of representations are there?
  • Esposa: Qué otra clase de representaciones existen?
  • Ryan: Actually, representations is one of these things that doesn't get used a lot. In most cases, a resource has only a single representation. But we're hoping that representations will be used more in the future because there's a bunch of new formats popping up all over the place.
  • 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.
  • Wife: Like what?
  • Esposa: Como cuales?
  • Ryan: Hmm. Well, there's this concept that people are calling Web Services. It means a lot of different things to a lot of different people but the basic concept is that machines could use the web just like people do.
  • 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.
  • Wife: Is this another robot thing?
  • Esposa: Esto es otra de esas cosas sobre robots?
  • Ryan: No, not really. I don't mean that machines will be sitting down at the desk and browsing the web. But computers can use those same protocols to send messages back and forth to each other. We've been doing that for a long time but none of the techniques we use today work well when you need to be able to talk to all of the machines in the entire world.
  • 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.
  • Wife: Why not?
  • Por qué no?
  • Ryan: Because they weren't designed to be used like that. When Fielding and his buddies started building the web, being able to talk to any machine anywhere in the world was a primary concern. Most of the techniques we use at work to get computers to talk to each other didn't have those requirements. You just needed to talk to a small group of machines.
  • 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.
  • Wife: And now you need to talk to all the machines?
  • Y ahora necesitas comunicarte con todas las máquinas?
  • Ryan: Yes - and more. We need to be able to talk to all machines about all the stuff that's on all the other machines. So we need some way of having one machine tell another machine about a resource that might be on yet another machine.
  • 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.
  • Wife: What?
  • Qué?
  • Ryan: Let's say you're talking to your sister and she wants to borrow the sweeper or something. But you don't have it - your Mom has it. So you tell your sister to get it from your Mom instead. This happens all the time in real life and it happens all the time when machines start talking too.
  • 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.
  • Wife: So how do the machines tell each other where things are?
  • Entonces cómo hacen las máquinas para decirle a las otras dónde están las cosas?
  • Ryan: The URL, of course. If everything that machines need to talk about has a corresponding URL, you've created the machine equivalent of a noun. That you and I and the rest of the world have agreed on talking about nouns in a certain way is pretty important, eh?
  • 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?
  • Wife: Yeah.
  • Claro
  • Ryan: Machines don't have a universal noun - that's why they suck. Every programming language, database, or other kind of system has a different way of talking about nouns. That's why the URL is so important. It let's all of these systems tell each other about each other's nouns.
  • 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.
  • Wife: But when I'm looking at a web page, I don't think of it like that.
  • Pero cuando estoy mirando una página web, yo no pienso de esa manera.
  • Ryan: Nobody does. Except Fielding and handful of other people. That's why machines still suck.
  • Nadie lo hace. Excepto Fielding y un puñado de personas. Es por eso que las máquinas aún apestan.
  • Wife: What about verbs and pronouns and adjectives?
  • Y qué hay de los verbos, pronombres y adjetivos?
  • Ryan: Funny you asked because that's another big aspect of REST. Well, verbs are anyway.
  • Es gracioso que lo preguntes porque ese es otra gran característica de REST. Bien, los verbos los son de todas maneras.
  • Wife: I was just joking.
  • Estaba bromeando.
  • Ryan: It was a funny joke but it's actually not a joke at all. Verbs are important. There's a powerful concept in programming and CS theory called polymorphism. That's a geeky way of saying that different nouns can have the same verb applied to them.
  • 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.
  • Wife: I don't get it.
  • No lo entiendo
  • Ryan: Well.. Look at the coffee table. What are the nouns? Cup, tray, newspaper, remote. Now, what are some things you can do to all of these things?
  • 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?
  • Wife: I don't get it...
  • No lo entiendo...
  • Ryan: You can get them, right? You can pick them up. You can knock them over. You can burn them. You can apply those same exact verbs to any of the objects sitting there.
  • Puedes agarrarlas, ¿no? Puedes levantarlas. Puedes golpearlas. Puedes quemarlas. Puedes aplicar esos mismos verbos a cualquiera de los objetos que están allí.
  • Wife: Okay... so?
  • Ok, ¿entonces?
  • Ryan: Well, that's important. What if instead of me being able to say to you, "get the cup," and "get the newspaper," and "get the remote"; what if instead we needed to come up with different verbs for each of the nouns? I couldn't use the word "get" universally, but instead had to think up a new word for each verb/noun combination.
  • 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.
  • Wife: Wow! That's weird.
  • |Wow! Eso es bizarro
  • Ryan: Yes, it is. Our brains are somehow smart enough to know that the same verbs can be applied to many different nouns. Some verbs are more specific than others and apply only to a small set of nouns. For instance, I can't drive a cup and I can't drink a car. But some verbs are almost universal like GET, PUT, and DELETE.
  • 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)
  • Wife: You can't DELETE a cup.
  • No puedes borrar una taza
  • Ryan: Well, okay, but you can throw it away. That was another joke, right?
  • Bueno, es verdad, pero podrías tirarla. Eso fue otro chiste, ¿verdad?
  • Wife: Yeah.
  • Si
  • Ryan: So anyway, HTTP--this protocol Fielding and his friends created--is all about applying verbs to nouns. For instance, when you go to a web page, the browser does an HTTP GET on the URL you type in and back comes a web page.
  • 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
  • Web pages usually have images, right? Those are separate resources. The web page just specifies the URLs to the images and the browser goes and does more HTTP GETs on them until all the resources are obtained and the web page is displayed. But the important thing here is that very different kinds of nouns can be treated the same. Whether the noun is an image, text, video, an mp3, a slideshow, whatever. I can GET all of those things the same way given a URL.
  • 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.
  • Wife: Sounds like GET is a pretty important verb.
  • Suena como que GET es un verbo bastante importante
  • Ryan: It is. Especially when you're using a web browser because browsers pretty much justGET stuff. They don't do a lot of other types of interaction with resources. This is a problem because it has led many people to assume that HTTP is just for GETing. But HTTP is actually ageneral purpose protocol for applying verbs to nouns.
  • 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.
  • Wife: Cool. But I still don't see how this changes anything. What kinds of nouns and verbs do you want?
  • Genial. Pero continúo sin ver como esto cambia algo. ¿Qué clase de sustantivos y verbos quieres?
  • Ryan: Well the nouns are there but not in the right format.
  • Bueno, los sustantivos están ahí pero no el formato adecuado.
  • Think about when you're browsing around amazon.com looking for things to buy me for Christmas. Imagine each of the products as being nouns. Now, if they were available in a representation that a machine could understand, you could do a lot of neat things.
  • 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.
  • Wife: Why can't a machine understand a normal web page?
  • ¿Por qué una máquina no puede entender una página web normal?
  • Ryan: Because web pages are designed to be understood by people. A machine doesn't care about layout and styling. Machines basically just need the data. Ideally, every URL would have a human readable and a machine readable representation. When a machine GETs the resource, it will ask for the machine readable one. When a browser GETs a resource for a human, it will ask for the human readable one.
  • 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.
  • Wife: So people would have to make machine formats for all their pages?
  • ¿Entonces las personas deberían realizar la versión para máquinas para todas sus páginas?
  • Ryan: If it were valuable.
  • Si esto vale la pena.
  • Look, we've been talking about this with a lot of abstraction. How about we take a real example. You're a teacher - at school I bet you have a big computer system, or three or four computer systems more likely, that let you manage students: what classes they're in, what grades they're getting, emergency contacts, information about the books you teach out of, etc. If the systems are web-based, then there's probably a URL for each of the nouns involved here: student, teacher, class, book, room, etc. Right now, getting the URL through the browser gives you a web page. If there were a machine readable representation for each URL, then it would be trivial to latch new tools onto the system because all of that information would be consumable in a standard way. It would also make it quite a bit easier for each of the systems to talk to each other. Or, you could build a state or country-wide system that was able to talk to each of the individual school systems to collect testing scores. The possibilities are endless.
  • 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.
  • Each of the systems would get information from each other using a simple HTTP GET. If one system needs to add something to another system, it would use an HTTP POST. If a system wants to update something in another system, it uses an HTTP PUT. The only thing left to figure out is what the data should look like.
  • 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.
  • Wife: So this is what you and all the computer people are working on now? Deciding what the data should look like?
  • ¿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: Sadly, no. Instead, the large majority are busy writing layers of complex specifications for doing this stuff in a different way that isn't nearly as useful or eloquent. Nouns aren't universal and verbs aren't polymorphic. We're throwing out decades of real field usage and proven technique and starting over with something that looks a lot like other systems that have failed in the past. We're using HTTP but only because it helps us talk to our network and security people less. We're trading simplicity for flashy tools and wizards.
  • 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.
  • Wife: Why?
  • ¿Por qué?
  • Ryan: I have no idea.
  • No tengo idea
  • Wife: Why don't you say something?
  • ¿Por qué no dices algo?
  • Ryan: Maybe I will.
  • Tal vez lo haga
1 Comment
fb4061344913647

fb4061344913647 • May 24th, 2015

Gran articulo !!!