En el desarrollo de aplicaciones web, la comunicación entre el cliente (por ejemplo, un navegador web o una aplicación móvil) y el servidor se realiza a través de peticiones HTTP. Los controladores en NestJS son los encargados de manejar estas peticiones. Dentro de un controlador, los métodos se asocian a diferentes verbos HTTP y rutas específicas para definir cómo el servidor responderá a las solicitudes.
El método HTTP GET
es fundamental para la recuperación de datos, permitiendo a los clientes solicitar información al servidor sin modificarla. En esta lección, profundizaremos en la implementación y el uso de los métodos GET
en los controladores de NestJS.
Creación de un controlador en NestJS
Los controladores en NestJS son clases que son decoradas con el decorador @Controller()
, el cual toma un argumento opcional que representa la ruta básica para ese controlador.
Para crear un controlador en NestJS, se utiliza el CLI de NestJS.
Por ejemplo, para crear un controlador llamado tasks
, se puede usar el siguiente comando:
nest generate controller tasks (o nest g controller tasks)
Esto generará un archivo tasks.controller.ts
en la carpeta correspondiente.
El contenido inicial del controlador será similar a este:
// src/tasks.controller.ts
import { Controller } from '@nestjs/common';
@Controller('tasks')
export class TasksController {}
Definición del método GET
Dentro de un controlador, se pueden definir diferentes métodos HTTP (como GET, POST, PUT, DELETE, etc.).
Para definir un método GET
, se utiliza el decorador @Get()
, que se coloca encima de un método dentro de un controlador.
Este método se ejecutará cuando se reciba una solicitud GET para la ruta especificada.
Veamos un ejemplo básico:
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
import { Controller, Get } from '@nestjs/common';
@Controller('tasks')
export class TasksController {
@Get()
findAll() {
return 'Este método devolverá todas las tareas';
}
}
En este ejemplo:
@Get()
: Indica que este método responderá a las solicitudes HTTPGET
. Dado que no se especifica una ruta dentro de@Get()
, este método manejará las solicitudesGET
a la ruta base del controlador, que es/tasks
.findAll(): string
: Es el método de la clase que se ejecutará cuando se reciba la solicitudGET
. En este caso, simplemente devuelve una cadena de texto.
Si la aplicación NestJS está en ejecución (por ejemplo, con nest start --watch
), al acceder a http://localhost:3000/tasks
en un navegador o con una herramienta como Postman, se recibirá la respuesta: "Este método devolverá todas las tareas".
Rutas parametrizadas
En muchos casos, es necesario acceder a detalles específicos de un recurso utilizando un parámetro, por ejemplo, el id
del recurso.
Esto se logra mediante el uso de parámetros de ruta. En NestJS, los parámetros de ruta se definen en el decorador @Get()
utilizando dos puntos :
seguidos del nombre del parámetro, y se acceden en el método del controlador mediante el decorador @Param()
.
import { Controller, Get, Param } from '@nestjs/common';
@Controller('tasks')
export class TasksController {
@Get(':id')
findOne(@Param('id') id: string) {
return `Este método devolverá la tarea con id ${id}`;
}
}
En el código anterior, cuando se hace una solicitud GET a la ruta /tasks/1
, por ejemplo, se invocará el método findOne
y se devolverá el texto 'Este método devolverá la tarea con id 1'.
En este caso, el decorador @Param('id')
se utiliza para indicar que el argumento id
del método findOne
debe obtener su valor del parámetro de ruta con nombre id
.
Métodos GET con Parámetros de Consulta (Query Parameters)
Además de los parámetros de ruta, las solicitudes GET
también pueden incluir parámetros de consulta, que se utilizan para filtrar, paginar o buscar recursos. Los parámetros de consulta se añaden a la URL después de un signo de interrogación ?
y se separan por &
(por ejemplo, /tasks?categoria=trabajo&realizado=1
). En NestJS, se acceden mediante el decorador @Query()
.
// src/tasks.controller.ts
import { Controller, Get, Param, Query } from '@nestjs/common';
@Controller('tasks')
export class TasksController {
@Get()
findAll(): string {
return 'Esta acción devuelve todas las tareas';
}
@Get(':id')
findOne(@Param('id') id: string): string {
return `Esta acción devuelve la tarea con ID: ${id}`;
}
@Get('buscar') // Una ruta específica para evitar conflictos con :id
findByCategory(@Query('categoria') categoria: string): string {
return `Buscando tareas en la categoría: ${categoria}`;
}
}
En este ejemplo:
@Get('buscar')
: Define una ruta específica para la búsqueda (/tasks/buscar
) para evitar ambigüedades con la ruta del parámetro de ID (:id
). Es importante que las rutas más específicas o con parámetros de consulta se definan antes que las rutas con parámetros de ruta genéricos para evitar conflictos en el enrutamiento.@Query('categoria') categoria: string
: El decorador@Query()
extrae el valor del parámetro de consulta llamadocategoria
y lo asigna a la variablecategoria
.
Si se accede a http://localhost:3000/tasks/buscar?categoria=trabajo
, la respuesta será: "Buscando tareas en la categoría: trabajo".
Consideraciones Adicionales
- Tipado de Respuestas: Aunque en los ejemplos se devuelve una cadena de texto, en aplicaciones reales los métodos
GET
suelen devolver objetos o arreglos de objetos (por ejemplo, JSON). NestJS serializa automáticamente los objetos JavaScript a formato JSON en las respuestas HTTP. - Servicios (Services): En una arquitectura NestJS bien diseñada, la lógica de recuperación de datos (como la interacción con una base de datos) no reside directamente en el controlador. En su lugar, se delega a los servicios. El controlador solo se encarga de recibir la petición y llamar al método correspondiente en el servicio. Esto se explicará en lecciones posteriores.
- Decoradores Combinados: Se pueden combinar diferentes decoradores para manejar distintos aspectos de la petición, como
@Headers()
,@Ip()
, etc.
Resumen de Puntos Clave
- El método
GET
se utiliza para solicitar o recuperar datos del servidor sin modificarlos. - En NestJS, los métodos
GET
en los controladores se definen utilizando el decorador@Get()
. - Para obtener un recurso específico mediante su identificador, se utilizan parámetros de ruta (
@Get(':id')
y@Param('id')
). - Para filtrar o buscar recursos, se utilizan parámetros de consulta (
@Query()
). - Es crucial ordenar las rutas en el controlador de la más específica a la más genérica para evitar conflictos de enrutamiento.
- La lógica de negocio y acceso a datos debe ser delegada a servicios para mantener los controladores limpios y enfocados en el manejo de peticiones.
Comprender y aplicar correctamente los métodos GET
es un pilar fundamental en la construcción de APIs RESTful con NestJS, permitiendo la recuperación eficiente y organizada de la información.
Aprendizajes de esta lección
- Comprender la función de los controladores en NestJS.
- Identificar la implementación de métodos GET.
- Entender el uso del decorador @Get().
- Explorar el concepto de rutas parametrizadas y el uso de @Param().
Completa Nest y certifícate
Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs