Estas son algunas reglas que te servirán para saber cómo y cuándo debes usar los verbos Http en una arquitectura REST.
Los verbos Http involucrados en un sistema REST son GET, POST, PUT, PATCH y DELETE.
GET es el que usamos para consultar un recurso. Una de las principales características de una petición GET es que no debe causar efectos secundarios en el servidor, no deben producir nuevos registros, ni modificar los ya existentes. A esta cualidad la llamamos idempotencia, cuando una acción ejecutada un número indefinido de veces, produce siempre el mismo resultado.
Esto quiere decir, que no importa cuántas veces hagamos una petición GET, los resultados obtenidos serán los mismos.
Cuando ingresamos a la dirección usando GET https://cf.com/c/backend-profesional/ estamos solicitando que se nos entregue el recurso identificado por /cursos/backend-profesional, este es un buen ejemplo de uso con GET.
Esta otra ruta: https://codigofacilito.com/c/recomendar?selected_level=0&category_options=28 aunque más compleja, también es correcta, estamos solicitando los recursos identificados por /cursos con las opciones de filtrado ahí indicadas. Sin importar cuantas veces hagamos esta solicitud, no modificará los resultados por sí misma.
Las peticiones con POST son sólo para crear recursos nuevos. Cada llamada con POST debería producir un nuevo recurso.
Normalmente, la acción POST se dirige a una recurso que representa una colección, para indicar que el nuevo recurso debe agregarse a dicha colección, por ejemplo POST /cursos para agregar un nuevo recurso a la colección cursos.
Si queremos crear un nuevo artículo, pudiéramos tener una URI /articulos. Lo que es importante en estos casos, es recordar que la URI no debe decir qué acción estamos ejecutando, nos olvidamos de /articulos/crear o de /cursos/agregar, etc. El verbo dice qué haremos, y la URI sobre qué recurso se harán las modificaciones.
Algunos escenarios más complejos para el uso de POST son los inicios de sesión, agregar a un carrito de compras, procesar un pago nuevo, etc. Estos ejemplos nos dejan en claro que el recurso creado por POST no es precisamente una fila en la base de datos, el recurso puede ser una sesión, un pago en una API externa, etc.
Los verbos PUT/PATCH son muy similares ya que ambos se usan para modificar un recurso existente. En la teoría, PUT se diferencía de PATCH, en que el primero indica que vamos a sustituir por completo un recurso, mientras que PATCH habla de actualizar algunos elementos del recurso mismo, sin sustituirlo por completo.
Un escenario común para el uso de PUT sería una llamada para actualizar la información de un curso, por ejemplo:
PUT /cursos/backend-profesional
O también:
PATCH /cursos/backend-profesional
En la práctica, y particularmente en Rails, ambos verbos se usan para actualizar un recurso, sin importar si lo sustituimos parcial o totalmente.
Por último, DELETE es el verbo que usamos para eliminar registros, bien pudiera ser para eliminar un recurso individual como en:
DELETE /cursos/backend-profesional
O para eliminar una colección completa:
DELETE /cursos
Esta es la manera a través de la que usamos los verbos Http en una aplicación web. Estos en combinación con las URIs proveen la interfaz uniforme de la que hablamos cuando discutimos las características de un sistema REST.
Como podrás notar, el beneficio de estas es que se establece una guía para la construcción de la aplicación, las rutas siempre representan recursos, las acciones se representan con Http.
Veamos cómo Rails usa REST en el ejemplo del scaffold, continuemos.
-
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
-