Implementación de Métodos HTTP PUT y DELETE en Código
Clase 12 de 23 • Curso de Backend con NestJS
Resumen
El verbo HTTP GET se utiliza para la obtención de datos y el verbo POST para la creación de estos. También existe el verbo PUT y DELETE para la actualización y borrado de datos respectivamente.
Actualización de datos con PUT
El verbo PUT se usa para la actualización de un registro en la BBDD. Suele recibir un Body con los datos a actualizar, pero también es importante que reciba el ID del registro para buscar al mismo.
import { Controller, Put, Param, Body } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
@Put('product/:idProduct')
updateProducto(@Param('idProduct') idProduct: string, @Body() body: any): any {
return {
idProduct: idProduct,
name: body.newName,
price: body.newPrice
};
}
}
El ID suele recibirse por parámetros de URL para que sea obligatorio, mientras que reservamos el cuerpo del mensaje para los datos actualizados. Finalmente, retornamos el registro completo luego de ser actualizado.
Eliminar datos con DELETE
Eliminar un registro es sencillo. Basta con decorar el endpoint con DELETE. Suele recibir el ID del registro a borrar únicamente.
import { Controller, Delete, Param } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
@Delete('product')
deleteProducto(@Param('idProduct') idProduct: string): any {
return {
idProduct: idProduct,
delete: true,
count: 1
};
}
}
Una buena práctica para este tipo de endpoints es retornar un booleano que indique si el registro fue eliminado o no. Además de incluir un count
que indique cuántos registros fueron eliminados.
src/controllers/products.controller.ts
import {..., Put, Delete } from '@nestjs/common';
@Controller('products')
export class ProductsController {
...
@Put(':id')
update(@Param('id') id: number, @Body() payload: any) {
return {
id,
payload,
};
}
@Delete(':id')
delete(@Param('id') id: number) {
return id;
}
}
Contribución creada por: Kevin Fiorentino.