40. Post, Patch y Delete
Manejo de Peticiones POST, PATCH y DELETE en NestJS
En este post, exploraremos cómo implementar los endpoints básicos para un CRUD (Create, Read, Update, Delete) en NestJS, específicamente para el manejo de peticiones POST, PATCH y DELETE.
El Controlador Base
Comenzamos con un controlador básico que ya tiene implementados los métodos GET:
import { Controller, Get, Param } from '@nestjs/common';
import { CarsService } from './cars.service';
@Controller('cars')
export class CarsController {
constructor(private readonly carsService: CarsService) {} // Inyección de dependencias
@Get()
getAllCars() {
return this.carsService.findAll();
}
@Get(':id')
getCarById(@Param('id') id: string) {
return this.carsService.findOneById(+id); // "+id" convierte string a number
} @Post()
createCar(@Body() body: any) {
return body;
}
@Patch(':id')
updateCar(
@Param('id', ParseIntPipe) id: number,
@Body() body: any
) {
return body;
}
@Delete(':id')
deleteCar(@Param('id', ParseIntPipe) id: number) {
return {
method: 'delete',
id
};
}
}Implementando POST para Crear Recursos
Para crear nuevos recursos, utilizamos el método POST. NestJS nos proporciona el decorador @Body() para acceder fácilmente al cuerpo de la petición:
import { Body, Post } from '@nestjs/common';
@Post()
createCar(@Body() body: any) {
return body;
}El cuerpo de la petición puede enviarse de diferentes formas:
Como JSON (el más común)
Como formulario (form-data)
Como x-www-form-urlencoded
NestJS maneja automáticamente estos formatos sin necesidad de configuración adicional.
Implementando PATCH para Actualizar Recursos
Para actualizar recursos existentes, usamos PATCH (también podríamos usar PUT). Aquí combinamos parámetros de ruta con el cuerpo de la petición:
import { Patch, ParseIntPipe } from '@nestjs/common';
@Patch(':id')
updateCar(
@Param('id', ParseIntPipe) id: number,
@Body() body: any
) {
return body;
}Usamos ParseIntPipe para convertir automáticamente el parámetro de ruta id de string a number.
Implementando DELETE para Eliminar Recursos
Finalmente, para eliminar recursos usamos DELETE. Normalmente solo necesitamos el ID del recurso a eliminar:
import { Delete } from '@nestjs/common';
@Delete(':id')
deleteCar(@Param('id', ParseIntPipe) id: number) {
return {
method: 'delete',
id
};
}CRUD Completo
Juntando todo, nuestro controlador queda así:
import { Controller, Get, Param, Post, Body, Patch, Delete, ParseIntPipe } from '@nestjs/common';
import { CarsService } from './cars.service';
@Controller('cars')
export class CarsController {
constructor(private readonly carsService: CarsService) {}
@Get()
getAllCars() {
return this.carsService.findAll();
}
@Get(':id')
getCarById(@Param('id') id: string) {
return this.carsService.findOneById(+id);
}
@Post()
createCar(@Body() body: any) {
return body;
}
@Patch(':id')
updateCar(
@Param('id', ParseIntPipe) id: number,
@Body() body: any
) {
return body;
}
@Delete(':id')
deleteCar(@Param('id', ParseIntPipe) id: number) {
return {
method: 'delete',
id
};
}
}Próximos Pasos
En futuros posts cubriremos:
Validación de datos entrantes
Manejo adecuado de errores
Transformación de datos con DTOs
Implementación completa del servicio
Este es solo el comienzo de lo que podemos hacer con NestJS para construir APIs robustas y mantenibles.
¿Qué otras dudas tienes sobre el manejo de peticiones HTTP en NestJS? ¡Déjalo en los comentarios!
Comentarios
Publicar un comentario