¿Cómo hacer que las aplicaciones web sean menos complicadas de diseñar y mantener? . REST al Rest-Cate.

Rodrigo Zottola
8 min readOct 19, 2023

¿Te has preguntado alguna vez cómo las aplicaciones web logran comunicarse de manera eficiente? ¿O cómo hacen para poder acceder a diferentes sistemas con diferentes tecnologías ?. Y si quisieras ir más allá, ¿cómo hacen las personas que las desarrollan para hacerlo de una manera eficiente y escalable?.

De manera similar a construir una casa, donde la clave radica en el diseño de planos y cimientos sólidos, en el desarrollo de software, todo comienza con una arquitectura sólida.

En respuestas a todas estas interrogantes, y dando un pequeño paso hacia las respuestas, presentaremos como protagonismo una arquitectura en particular, la arquitectura REST. Planteada como una filosofía REST ha transformado la forma en que diseñamos sistemas distribuidos en la era digital. Desde su inicio hasta su adopción generalizada, trataremos en este artículo de llevarte a un breve vistazo, detalles y explicaremos su importancia en el mundo de la tecnología.

Reflexiones de los Expertos

REST ha resuelto problemas clave en la comunicación entre aplicaciones y ha allanado el camino hacia la web que hoy se conoce.

Como puntos de entrada a estos conceptos podemos citar algunas reflexiones ,en pro de entender la arquitectura REST, de dos referentes en materia ingeniería de software: Roy Fielding, y Martin Fowler. Fielding, el creador de REST, señala que el enfoque de esta arquitectura se basa en los principios fundamentales de la web, como la simplicidad, la escalabilidad y la independencia de las implementaciones. Por otro lado, Martin Fowler, conocido por sus contribuciones a la arquitectura de software, ha elogiado la simplicidad y la eficacia de REST, destacando su enfoque en los recursos y su capacidad para crear sistemas altamente interoperables

Más que un protocolo una filosofía

La arquitectura REST, cuyo acrónimo proviene de “Representational State Transfer” (Transferencia de Estado Representacional), es mucho más que una simple especificación técnica.

Introducida por Roy Fielding, mencionado anteriormente, como un estilo arquitectónico introducido como parte de su tesis doctoral del año 2000 (Architectural Styles and the Design of Network-based Software Architectures).

Se convirtió en una filosofía que revoluciona la manera en que concebimos y desarrollamos sistemas distribuidos.

Pero, antes de adentrarnos en los detalles técnicos, es crucial comprender por qué nació esta arquitectura y qué problemas buscaba resolver.

Génesis de la arquitectura REST

En aquel tiempo, previo a la presentación de la tesis de Fielding, las aplicaciones web estaban en pleno auge, presentando también desafíos significativos a sus desarrolladores en términos de cómo estas aplicaciones se debían comunicar entre sí. Estas requerían poder compartir información fácilmente y, en su lugar, se basaban en protocolos y métodos de comunicación propietarios y en algunas situaciones muy complejos.

Tecnologías predominantes de la época, como CORBA (Common Object Request Broker Architecture) y SOAP (Simple Object Access Protocol), buscaban abordar la comunicación entre aplicaciones, pero lo hacían de manera compleja y pesada. Estos protocolos requerían una cantidad significativa de configuración y, en muchos casos, no eran interoperables entre diferentes plataformas y sistemas.

En este contexto, Roy Fielding se enfocó en diseñar una arquitectura que abordara dichos problemas de una manera mas eficiente.

Como un visionario planteaba un mundo donde las aplicaciones pudieran comunicarse de manera sencilla y universal utilizando los principios fundamentales de la web. Su objetivo era eliminar la complejidad innecesaria y promover la independencia entre sistemas, permitiendo que las aplicaciones se escalen y se adapten de manera orgánica a medida que crecía la demanda.

Así nació la arquitectura REST, como una respuesta a los problemas de su época: la necesidad de simplificar la comunicación entre aplicaciones, hacerla más escalable y eliminar las barreras de interoperabilidad. REST se convirtió en una filosofía que revolucionó la forma en que concebimos y desarrollamos sistemas distribuidos, allanando el camino para la web moderna tal como la conocemos.

Condiciones para ser escalable y sencillo

Como deciamos antes la implementación de una arquitectura REST se basa en un conjunto de restricciones y principios clave que ayudan a definir su estructura y comportamiento. De las cuales podemos citar las siguientes:

Cliente-Servidor: Promueve la separación de preocupaciones, donde el cliente se encarga de la interfaz de usuario y la experiencia del usuario, mientras que el servidor maneja la lógica de negocio y el almacenamiento de datos. Esta separación permite que ambas partes evolucionen de manera independiente y mejora la escalabilidad.

Sin Estado (Stateless): Cada solicitud del cliente al servidor debe contener toda la información necesaria para comprender y procesar la solicitud. El servidor no almacena información de estado sobre el cliente entre solicitudes. Esto facilita la escalabilidad, ya que cada solicitud es independiente y no se requiere almacenamiento de estado en el servidor.

Almacenamiento en caché (Cacheable): Las respuestas de un servidor REST pueden ser almacenadas en caché en el cliente, lo que mejora la eficiencia y reduce la carga en el servidor. Las respuestas deben indicar si son cachéables o no para que el cliente pueda tomar decisiones adecuadas de almacenamiento en caché.

Interfaz Uniforme: REST define una interfaz uniforme que consiste en recursos, identificadores de recursos, métodos y representaciones.

Sistema de Capas: Un sistema REST puede estar compuesto por múltiples capas, donde cada capa realiza una función específica. Cada capa no sabe nada sobre las capas más allá de la inmediatamente superior o inferior. Esto mejora la escalabilidad y la modularidad.

Código bajo Demanda (Optional): Esta restricción es opcional y permite que el servidor envíe código ejecutable al cliente (por ejemplo, scripts JavaScript). Esto puede mejorar la funcionalidad del cliente, pero no es esencial en una arquitectura REST.

Mensajes con Recursos Identificables: En una arquitectura REST, cada recurso (por ejemplo, un objeto o entidad) se identifica mediante un URI (Uniform Resource Identifier). Los mensajes HTTP utilizados para interactuar con los recursos deben ser autoexplicativos y llevar información suficiente en la solicitud para ser procesados por el servidor.

Verbos HTTP: Los verbos HTTP estándar, como GET, POST, PUT y DELETE, se utilizan para realizar operaciones en los recursos. Cada verbo tiene un significado claro y predecible en el contexto de REST.

Hay que tener en consideración que un sistema es considerado REST sí y solo sí se adhiere a todas las restricciones requeridas.

La Elegante Comunicación

El objetivo principal de REST es proporcionar un conjunto de restricciones y principios para que los servicios web sean escalables, mantenibles y sencillos. Una de las características distintivas de la implementación de la arquitectura RESTful es su uso meticuloso de los verbos HTTP para definir las operaciones que se pueden realizar en un recurso. Cada verbo tiene un significado claro y preciso:

  • GET: Se utiliza para recuperar información de un recurso.
  • POST: Permite crear nuevos recursos en el servidor.
  • PUT: Actualiza recursos existentes con nueva información.
  • DELETE: Elimina recursos del servidor.

Esta uniformidad en la interfaz simplifica la comprensión y el uso de las API RESTful. En lugar de depender de procedimientos o métodos complejos, RESTful se basa en la simplicidad y la transparencia de los verbos HTTP para comunicar intenciones y acciones. Esto mejora la claridad y la eficiencia en la comunicación entre sistemas.

Condiciones para ser escalable y sencillo

Como decíamos antes la implementación de una arquitectura REST se basa en un conjunto de restricciones y principios clave que ayudan a definir su estructura y comportamiento. De las cuales podemos citar las siguientes:

Cliente-Servidor: Promueve la separación de preocupaciones, donde el cliente se encarga de la interfaz de usuario y la experiencia del usuario, mientras que el servidor maneja la lógica de negocio y el almacenamiento de datos. Esta separación permite que ambas partes evolucionen de manera independiente y mejora la escalabilidad.

Sin Estado (Stateless): Cada solicitud del cliente al servidor debe contener toda la información necesaria para comprender y procesar la solicitud. El servidor no almacena información de estado sobre el cliente entre solicitudes. Esto facilita la escalabilidad, ya que cada solicitud es independiente y no se requiere almacenamiento de estado en el servidor.

Almacenamiento en caché (Cacheable): Las respuestas de un servidor REST pueden ser almacenadas en caché en el cliente, lo que mejora la eficiencia y reduce la carga en el servidor. Las respuestas deben indicar si son cacheables o no para que el cliente pueda tomar decisiones adecuadas de almacenamiento en caché.

Interfaz Uniforme: REST define una interfaz uniforme que consiste en recursos, identificadores de recursos, métodos y representaciones.

Sistema de Capas: Un sistema REST puede estar compuesto por múltiples capas, donde cada capa realiza una función específica. Cada capa no sabe nada sobre las capas más allá de la inmediatamente superior o inferior. Esto mejora la escalabilidad y la modularidad.

Código bajo Demanda (Optional): Esta restricción es opcional y permite que el servidor envíe código ejecutable al cliente (por ejemplo, scripts JavaScript). Esto puede mejorar la funcionalidad del cliente, pero no es esencial en una arquitectura REST.

Mensajes con Recursos Identificables: En una arquitectura REST, cada recurso (por ejemplo, un objeto o entidad) se identifica mediante un URI (Uniform Resource Identifier). Los mensajes HTTP utilizados para interactuar con los recursos deben ser autoexplicativos y llevar información suficiente en la solicitud para ser procesados por el servidor.

Verbos HTTP: Los verbos HTTP estándar, como GET, POST, PUT y DELETE, se utilizan para realizar operaciones en los recursos. Cada verbo tiene un significado claro y predecible en el contexto de REST.

Hay que tener en consideración que un sistema es considerado REST sí y solo sí se adhiere a todas las restricciones requeridas.

Problemas que Resuelve la Arquitectura RESTful

Si hablamos de sistemas distribuidos uno de los problemas mas destacados resuelto por esta arquitectura es la simplicidad en la interacción entre sistemas. El uso de los verbos HTTP, simplifica la comunicación y elimina la necesidad de procedimientos complejos o protocolos propietarios. A esto podemos sumar el cómo promueve la escalabilidad y la independencia de implementación.

Por otro lado podemos destacar que los sistemas diseñados bajo esta arquitectura pueden crecer de manera orgánica al agregar más servidores o instancias de cada componente sin requerir cambios significativos en el diseño. Esto se traduce en una mayor capacidad de respuesta y rendimiento.

Comparaciones con otras Arquitecturas

Si bien la implementación RESTful brilla por su simplicidad y eficacia, es importante compararla con otras arquitecturas, como SOAP (Simple Object Access Protocol). SOAP es más rígida y compleja, mientras que RESTful se adapta mejor a sistemas flexibles y a entornos donde la simplicidad y la escalabilidad son fundamentales.

Aun así cabe destacar que la implementación RESTful no es la solución perfecta para todos los casos. Como siempre es necesario conocer sus detalles, tener muy claro qué problemas se quiere solucionar, así como el análisis de tecnologías similares para poder aplicar nuestro criterio como desarrolladores para la propuesta de una solución eficaz. Como ejemplo podemos decir que en aplicaciones donde la seguridad y la transacción son críticas, otras arquitecturas como SOAP pueden ser más apropiadas.

Beneficios y Desventajas de RESTful

Los beneficios son evidentes: simplicidad, escalabilidad y eficiencia en la comunicación. Sin embargo, también presenta desventajas, como la necesidad de mantener el estado del cliente y la falta de soporte nativo para transacciones distribuidas. Estas desventajas pueden resolverse utilizando otras arquitecturas complementarias cuando sea necesario.

Conclusiones

En resumen, Rest es mucho más que un protocolo; es una filosofía que promueve la simplicidad, la escalabilidad y la independencia de implementación en el diseño de sistemas distribuidos. Esta arquitectura ha demostrado ser una poderosa herramienta en el itinerario de cualquier profesional de software en la actualidad, ya sea como un modelo a implementar en su totalidad, o como soporte a otras arquitecturas. Al adoptar RESTful, las organizaciones pueden crear sistemas más eficaces y flexibles, allanando el camino hacia un futuro tecnológico más conectado y dinámico, por lo que creemos que es un conocimiento básico que debe ser bien entendido por cualquier profesional del desarrollo de software en su carrera de diseño.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Rodrigo Zottola
Rodrigo Zottola

Written by Rodrigo Zottola

Senior Agile Lead - Certified Agile Coach (PAC, ICP-CAT,ICP-BAF,SA, CSM, CAL-T, CAL-E, CAL-O, ICP- ATF, ICP-ACC, LCM Voyager, MG3.0 Practitioner, SAFE PO)

No responses yet

Write a response