Una parte importante del desarrollo de aplicaciones web, es entender que se trata de una constante comunicación entre dos equipos, el cliente y el servidor.
Como parte del desarrollo de tu aplicación web, vas a tener que establecer reglas de comunicación entre ambos, cómo recibirás los datos, qué páginas se pueden visitar, cómo se mostrarán los recursos solicitados, etc.
Existen guías existentes, a las que llamamos arquitecturas, como el MVC, pero en este caso para definir cómo se comunican el servidor y el cliente, una de las más populares es el REpresentational State Transfer o REST por sus siglas iniciales.
Roy Fielding introdujo este concepto en el año 2000 y cambió por completo el diseño de servicios web en general. En esta arquitectura se establecen una serie de principios que definen cómo se dará la comunicación entre dos equipos.
Hoy en día, los servicios web de Google, Twitter, Github, y las aplicaciones web en general respetan estos principios para poder separar las responsabilidades del cliente, con las del servidor. Rails es un framework que basa mucha de su funcionalidad y muchas de sus convenciones en esta arquitectura, por lo que es importante aprender de ella.
Como mencionaba, existen 6 limitantes que un sistema REST debe respetar.
- Usar arquitectura cliente/servidor
- Que no puede guardar estado, es stateless
- Que puede guardar en caché información, a lo que normalmente nos referimos como cacheability
- Que el sistema puede estar basado en capas.
- Que poseen una interfaz uniforme
- Y por último, que pueda extender la funcionalidad del cliente mediante el envío de código on demand. Esta última es la única limitante opcional.
Vamos a abarcar cada una de estas características de manera independiente para que quede en tu biblioteca de conocimiento cómo se define si un sistema usa REST o no.
Primero la arquitectura cliente/servidor, la idea detrás de esta guía es la separación de responsabilidades entre el cliente y el servidor. Así el cliente no se preocupa por el almacenamiento de los datos, y el servidor no se preocupa por la interfaz y el estado de la misma.
El beneficio de este principio es la portabilidad de los elementos, la interfaz puede ser multiplataforma y evolucionar independientemente del servidor, porque ambos están desconectados y son independientes.
El segundo principio, el del no estado o statelesness que habla de cómo en la comunicación entre el cliente y el servidor no existe contexto, es decir, cada petición entre los dos componentes debe ser independiente y nunca dependerá de peticiones anteriores.
Este principio beneficia el rendimiento del servidor, ya que este no debe almacenar información innecesaria, toda la que necesita vendrá en cada petición y será desechada al completar la petición misma, por otro lado, las aplicaciones web con más demanda suelen estar conformadas de más de una computadora servidor, el principio del no estado hace más sencillo esto ya que no hay necesidad de preocuparnos por qué computadora procesa cada petición, ya que las peticiones mismas son independientes
La cacheabilidad habla de la posibilidad de que algunas respuestas puedan ser almacenadas en caché, tal como hemos platicado antes. Para temas del servidor, lo importante es que este se encargue de definir cuáles respuestas pueden ser cacheadas y cuáles no, por cuánto tiempo se pueden almacenar en caché, etc.
El principio del sistema en capas nos dice que el servidor debe estar compuesto de distintas capas, cada una con una responsabilidad única y bien definida. Ejemplos de las capas son las definidas en la arquitectura MVC que usa Rails, la de presentación o vista, la de datos o el modelo, y la del controlador que se encarga de comunicar la vista con los datos.
Las capas en REST deben ser independiente, por lo que podríamos reemplaza una sin afectar a otras, además, una capa debe comunicarse sólo con las capas adyacentes, esto quiere decir que si nuestro sistema tiene una capa de presentación, una manejadora de peticiones y una de datos, en ese orden, la capa de presentación no puede directamente comunicarse con la de datos, porque no son adyacentes, en cambio, debe hacerlo a través de su capa adyacente, la de comunicación, que efectivamente sí puede comunicarse con la de datos por estar juntas.
La interfaz uniforme es una de las piedras angulares de esta arquitectura, es junto con el principio del no estado, las dos reglas más importantes de un sistema REST, tan es así que dedicaremos un vídeo exclusivo a hablar de este tema.
En pocas palabras, este principio dicta el estándar para la interfaz de comunicación entre el cliente y el servidor, es decir el cómo se comunicarán estas dos entidades.
Estandarizar la interfaz permite que cada capa del sistema evolucione independientemente, ya que la comunicación es un estándar, no tienes que preocuparte por cómo se está desarrollando el servidor, si estás desarrollando el cliente.
Por último tenemos la regla del código on demand. Este punto está pensado para que el servidor pueda enviar scripts de código, o en tiempo antaño un objeto de Flash o JAVA, para extender la funcionalidad del cliente. No ahondaremos mucho en este punto porque a final de cuentas, esta es la única regla que es opcional, ya que no todos los sistemas REST aplican este punto, aunque ciertamente con Rails hace uso de esta funcionalidad al permitirnos enviar código de JavaScript como respuesta a una petición.
Ahora que conoces la parte técnica, hablemos de manera más práctica en los siguientes temas.
-
Módulo 1 | 10 clases
Introducción al framework
expand_more-
play_circle_outline
Clase 1
Presentación del curso de Rails
-
play_circle_outline
Clase 2
Qué es Ruby on Rails
-
play_circle_outline
Clase 3
Conocimientos previos
-
play_circle_outline
Clase 4
Instalación en Mac
-
play_circle_outline
Clase 5
Instalación en Windows
-
play_circle_outline
Clase 6
Crear un proyecto de Ruby on Rails
-
play_circle_outline
Clase 7
Explorar los archivos del proyecto
-
play_circle_outline
Clase 8
Componentes del framework
-
play_circle_outline
Clase 9
Convención sobre configuración
-
play_circle_outline
Clase 10
Ambientes de desarrollo
-
-
Módulo 2 | 9 clases
Primeros pasos con Rails
expand_more-
play_circle_outline
Clase 1
Primera vista y primera ruta. Hola mundo
-
play_circle_outline
Clase 2
Motor de render para las vistas
-
play_circle_outline
Clase 3
Cómo responde a una petición web Ruby on Rails
-
play_circle_outline
Clase 4
Introducción a las rutas
-
play_circle_outline
Clase 5
La ruta principal
-
play_circle_outline
Clase 6
Métodos en las vistas (Helpers)
-
play_circle_outline
Clase 7
Formularios en Rails
-
play_circle_outline
Clase 8
Leer parámetros en un controlador
-
play_circle_outline
Clase 9
Generadores de código
-
-
Módulo 3 | 10 clases
Manejo de datos
expand_more-
play_circle_outline
Clase 1
Introducción al bloque
-
play_circle_outline
Clase 2
MIgraciones en Rails
-
play_circle_outline
Clase 3
Crear la base de datos y primer migración
-
play_circle_outline
Clase 4
ID y timestamps
-
play_circle_outline
Clase 5
Modelos
-
play_circle_outline
Clase 6
Pruebas unitarias
-
play_circle_outline
Clase 7
Primera prueba unitaria
-
play_circle_outline
Clase 8
Primera validación del modelo
-
play_circle_outline
Clase 9
El ActiveRecord
-
play_circle_outline
Clase 10
Acercamiento a las consultas
-
-
Módulo 4 | 6 clases
REST
expand_more -
Módulo 5 | 9 clases
Construye tu propio CRUD
expand_more-
play_circle_outline
Clase 1
Crear la tabla y el modelo
-
play_circle_outline
Clase 2
Pruebas unitarias y validaciones
-
play_circle_outline
Clase 3
Crear el controlador
-
play_circle_outline
Clase 4
Rutas REST
-
play_circle_outline
Clase 5
Crear registros
-
play_circle_outline
Clase 6
Consultar y mostrar registros
-
play_circle_outline
Clase 7
Editar registros
-
play_circle_outline
Clase 8
Eliminar registros
-
play_circle_outline
Clase 9
Recapitulación del bloque
-
-
Módulo 6 | 10 clases
Controladores y rutas
expand_more-
play_circle_outline
Clase 1
Detalles de un controlador
-
play_circle_outline
Clase 2
Respuestas de un controlador
-
play_circle_outline
Clase 3
Parámetros
-
play_circle_outline
Clase 4
Strong Params: Filtrado de parámetros
-
play_circle_outline
Clase 5
Filtros en el controlador
-
play_circle_outline
Clase 6
Cookies y sesiones
-
play_circle_outline
Clase 7
Mensajes flash
-
play_circle_outline
Clase 8
Concerns
-
play_circle_outline
Clase 9
Métodos asociados a rutas
-
play_circle_outline
Clase 10
Configurar las rutas recurso
-
-
Módulo 7 | 18 clases
Modelos
expand_more-
play_circle_outline
Clase 1
Introducción al bloque
-
play_circle_outline
Clase 2
Filtrado con where
-
play_circle_outline
Clase 3
Operador lógico OR para consultas
-
play_circle_outline
Clase 4
Negación de consultas con NOT
-
play_circle_outline
Clase 5
Limpieza de parámetros (sanitizar)
-
play_circle_outline
Clase 6
Otras operaciones comúnes
-
play_circle_outline
Clase 7
Ejercicio: Implementar paginación
-
play_circle_outline
Clase 8
Scopes y métodos de clase
-
play_circle_outline
Clase 9
Configurando validaciones
-
play_circle_outline
Clase 10
Callbacks
-
play_circle_outline
Clase 11
Callbacks con su descripción en español
-
play_circle_outline
Clase 12
Relaciones entre tablas
-
play_circle_outline
Clase 13
Relaciones en el esquema
-
play_circle_outline
Clase 14
Definir asociaciones
-
play_circle_outline
Clase 15
Foreign Key Constraints
-
play_circle_outline
Clase 16
Relaciones muchos a muchos
-
play_circle_outline
Clase 17
Definir asociaciones muchos a muchos
-
play_circle_outline
Clase 18
Dónde aprender más
-
-
Módulo 8 | 13 clases
Vistas y Formularios
expand_more-
play_circle_outline
Clase 1
Panorama general de las vistas
-
play_circle_outline
Clase 2
Layouts
-
play_circle_outline
Clase 3
yields con nombre
-
play_circle_outline
Clase 4
Trabajando con formularios
-
play_circle_outline
Clase 5
Cómo funcionan los métodos de FormBuilder
-
play_circle_outline
Clase 6
Select
-
play_circle_outline
Clase 7
Checkboxes
-
play_circle_outline
Clase 8
Checkboxes y relaciones
-
play_circle_outline
Clase 9
Radio buttons
-
play_circle_outline
Clase 10
Parciales
-
play_circle_outline
Clase 11
Render de colecciones
-
play_circle_outline
Clase 12
Bloques y layouts para parciales
-
play_circle_outline
Clase 13
Helper methods
-
-
check_circle_outlineMódulo 9
Examen del curso
expand_more-
done_all
Examen
Examen final del curso
-