En programación, el verbo HTTP DELETE se utiliza para solicitudes que eliminen del registro una base y puedan modificar el estado del servidor a diferencia de los verbos HEAD y GET
Borrando registros en Javascript
El DELETE es mucho más sencillo, ya que no necesitas de tipado de datos. Solo con el ID del registro que quieres borrar suele ser suficiente.
Este tipo de endpoint suele devolver un booleano, o un objeto con alguna propiedad booleana, que indica si el registro fue borrado o no. Desde tu componente, únicamente le envías el ID como parámetro al método y si el registro fue borrado correctamente, puedes eliminarlo de tu lista de productos.
// components/catalogo/catalogo.component.tsdeleteProduct(idProduct: number):void{this.apiService.deleteProduct(idProduct).subscribe(p=>{if(p){// Borramos el producto del Array de productosconst index =this.productos.findIndex(product=> product.id=== idProduct);this.productos.splice(index,1);}});}
Baja lógica vs. baja física
Los endpoints del tipo DELETE, realmente no borran el registro como tal en la base de datos la mayoría de veces. En cambio, únicamente modifican un booleando colocándolo en false para que dicho registro ya no esté disponible.
A eso se lo conoce como Baja Lógica, mientras que la Baja Física si borra el registro completamente de la base de datos sin poder recuperarse. Es importante que conozcas la diferencia, ya que en aplicaciones profesionales suele utilizarse siempre la Baja Lógica, el registro ya no estará disponible, pero continúa existiendo.
Super, me ha gustado mucho esta ruta de angular, teniendo algo de experiencia haciendo paginas web sin ayuda de algún framework y haciendo todo junto(back y front) me doy cuanta lo mucho que ayuda un buen framework y lo ordenado que es todo. Ahora lo que mas dudad me trae es la parte del logueo y seguridad pero supongo que ya casi llegaré a esas clases :D :)
CRUD = Create Read Update Delete
Si seguiste mi consejo de crear un componente separado para el detalle del producto, puedes hacer las siguientes modificaciones para que cierre la ventana de detalle y se actualice la lista de productos:
product-detail.component.ts
@Output() productDeleted =newEventEmitter<string>();//deleteProduct(){const id =this.product.id;this.productsService.delete(id).subscribe(data=>{this.productDeleted.emit(id)})}
Sigo pensando lo mismo amigo, para mejor práctica pasarle al hijo él, id como lo haces con él .emit y en el componente padre que es productos entonces si ahí realizar la petición para la eliminación
Desde mi punto de vista, si esta bien que el componente del detalle del producto tenga esa responsabilidad para que quede desacoplado del contenedor y se pueda utilizar sin problema en cualquier otra parte de la aplicación
Buen dia, una pregunta, hay mucha diferencia si en caso de borrar el elemento en el array, se traiga toda la info de base de datos y precargar el array, para que asi tenga toda la info en tiempo real (por si algun usuario tambien entro y borro algun registro en una misma seccion)? entiendo que el aplicativo tendria menor rendimiento pero cual seria la buena practica?
Al momento de aplicar el delete, compruebo que el producto se eliminó en el backend (porque incluso hago un get especifico a dicho producto y me dice que ya no existe), pero, desde las herramientas de desarrollador no me muestra nada, ningún mensaje de exito o de fallo, como si el botón de delete no hiciera nada. Ni en consola, ni en network.
¿Qué podría ser?
Puede ser que no puedas ver nada desde el front-end por que tienes algún filtro aplicado en Network. Fijate de seleccionar All o XHL para visualizar las request que se hacen al backend. En la consola no aparecerá nada si no tienes un console.log en la app. Salvo errores que si se loguea en rojo y te da información.
Saludos
En los aportes hay una sección que dice Baja lógica vs. baja física, para el desarrollo de aplicaciones profesionales(backend) usare siempre baja lógica y esto tiene mucho sentido ya que siempre es una buena idea tener un historial de los usuarios, productos, categorías, clientes que tenías y de esta manera sera mucho más fácil su recuperación. Wow no pense que esto lo aprendería en una clase de angular
curioso el spanglish
¿Qué es un CRUD?
CRUD = Create Read Update Delete
Crear, Leer, Actualizar y Eliminar