40. Post, Patch y Delete

 

Implementando un CRUD Básico en NestJS: Guía Paso a Paso

En esta entrada, veremos cómo implementar los endpoints básicos de un CRUD (Create, Read, Update, Delete) en NestJS, utilizando un controlador de Cars como ejemplo.

1. Estructura Inicial del Controlador

Empecemos con un controlador básico que ya tiene el método GET para leer datos:

typescript
Copy
Download
import { Controller, Get, Post, Patch, Delete, Body, Param, ParseIntPipe } from '@nestjs/common';

@Controller('cars')
export class CarsController {

  @Get()
  getAllCars() {
    return ['Toyota', 'Honda', 'Volvo'];
  }

  @Get(':id')
  getCarById(@Param('id', ParseIntPipe) id: number) {
    return `Carro con ID ${id}`;
  }
}

2. Crear un Nuevo Recurso (POST)

Para crear un nuevo carro, usamos el decorador @Post(). Aquí recibimos los datos del cuerpo de la solicitud con @Body():

typescript
Copy
Download
@Post()
createCar(@Body() body: any) {
  return {
    ok: true,
    method: 'POST',
    body
  };
}

Ejemplo en Postman:

  • URLPOST /cars

  • Body:

    json
    Copy
    Download
    { "brand": "Volvo", "model": "XC60" }
  • Respuesta:

    json
    Copy
    Download
    { "ok": true, "method": "POST", "body": { "brand": "Volvo", "model": "XC60" } }

3. Actualizar un Recurso (PATCH)

Para actualizar, usamos @Patch() y combinamos @Param() (para el ID) con @Body() (para los nuevos datos):

typescript
Copy
Download
@Patch(':id')
updateCar(
  @Param('id', ParseIntPipe) id: number,
  @Body() body: any
) {
  return {
    method: 'PATCH',
    id,
    body
  };
}

Ejemplo en Postman:

  • URLPATCH /cars/1

  • Body:

    json
    Copy
    Download
    { "model": "XC90" }
  • Respuesta:

    json
    Copy
    Download
    { "method": "PATCH", "id": 1, "body": { "model": "XC90" } }

4. Eliminar un Recurso (DELETE)

Para eliminar, usamos @Delete() y el ID del recurso:

typescript
Copy
Download
@Delete(':id')
deleteCar(@Param('id', ParseIntPipe) id: number) {
  return {
    method: 'DELETE',
    id
  };
}

Ejemplo en Postman:

  • URLDELETE /cars/1

  • Respuesta:

    json
    Copy
    Download
    { "method": "DELETE", "id": 1 }

5. Validaciones y Próximos Pasos

Actualmente, nuestro CRUD no valida los datos recibidos (como campos obligatorios o tipos de datos). En futuras entradas, cubriremos:

  • DTOs (Data Transfer Objects): Para definir la estructura esperada del cuerpo de la solicitud.

  • Pipes de Validación: Como class-validator para asegurar que los datos sean correctos.

  • Servicios: Donde implementaremos la lógica de negocio (crear, actualizar, etc.).

Conclusión

Con estos decoradores (@Post@Patch@Delete), ya tienes la base para un CRUD funcional en NestJS. En la próxima entrada, profundizaremos en cómo validar datos y estructurar mejor el código.

¿Te gustaría ver algún tema en particular? ¡Déjalo en los comentarios!


Código completoEnlace al repositorio (opcional).

Keywords: NestJS, CRUD, API REST, Backend, TypeScript.


Este post es claro, práctico y sigue un flujo lógico. Si quieres, puedo ajustar el tono o agregar más detalles técnicos. ¡Espero que te sea útil! 🚀

Comentarios

Entradas más populares de este blog

48. ValidationPipe - Class Validator y Class Transformer

32-Modulos

49. Pipes Globales - A nivel de Aplicación