Métodos GET en controladores

Básico
Nest
Nest
Actualizado: 05/06/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

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.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

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 HTTP GET. Dado que no se especifica una ruta dentro de @Get(), este método manejará las solicitudes GET 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 solicitud GET. 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/tasksen 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 llamado categoria y lo asigna a la variable categoria.

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

⭐⭐⭐⭐⭐
4.9/5 valoración