Contenido del curso
0:00/8:15
Cómo JavaScript habla con una API
01:30Cómo funciona el protocolo HTTP entre JavaScript y APIs
Suscríbete para ver másQué significan los códigos de estado HTTP
Suscríbete para ver másHeaders HTTP: qué son y cómo funcionan
Suscríbete para ver másPeticiones HTTP reales en el navegador
Suscríbete para ver másIntegración de productos y detalle con fetch
Suscríbete para ver másFiltrar productos por categoría con URLSearchParams
Suscríbete para ver másCrear productos con fetch y POST
Suscríbete para ver másEdición de productos con verbo PUT en JavaScript
play_circleViendo ahoraCómo implementar DELETE en un repositorio
Suscríbete para ver másActualizar un producto de forma segura y completa exige entender el verbo put, construir correctamente la URL con el ID y mapear el formulario a los datos esperados. Aquí verás cómo implementar la edición de productos en JavaScript usando fetch, integrar el template de edición y validar el flujo con una prueba real cambiando el precio de 44 a 15.
¿Cómo editar un producto con el verbo put en el API?
La especificación indica que la actualización es total: se envía el objeto completo del producto con el verbo put. Además, la URL debe incluir el ID del producto. El cuerpo es similar al de creación: el mismo JSON pero con todos los campos necesarios.
¿Qué cambia en la url y el body?
// Repositorio: método de edición total async function editProduct(productId, productData) { const response = await fetch(`${url}${productId}/`, { method: 'PUT', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(productData) }); if (!response.ok) { throw new Error(`No se puede actualizar el producto ${productId}. Status: ${response.status}`); } const jsonResponse = await response.json(); return jsonResponse; }
¿Qué cabeceras y errores considerar?
Nota: inicialmente se pensó en un método llamado updateProduct, pero se estandarizó como editProduct para coincidir con la invocación.
¿Cómo preparar el template para precargar el formulario?
Se usa un botón de edición que trae los datos del API y precarga el formulario. En edit.js, el método loadProduct toma el repository desde window, invoca getProduct con el ID y muestra el formulario.
// edit.js: carga de datos antes de editar async function loadProduct() { const repo = window.productRepository; const productId = new URLSearchParams(location.search).get('id'); const currentProduct = await repo.getProduct(productId); if (!currentProduct) { showError('Producto no encontrado.'); return; } renderForm(currentProduct); // precarga el formulario }
¿Cómo enviar el formulario y probar la actualización?
El envío se gestiona con handleSubmit: ajusta los datos al formato esperado por el API y llama a editProduct(productId, updatedData). Particularmente, el campo de imágenes debe mapearse: no es imageUrl, sino images, y debe ser una lista de cadenas.
// edit.js: envío del formulario y llamada a la edición async function handleSubmit(e) { e.preventDefault(); const repo = window.productRepository; const productId = new URLSearchParams(location.search).get('id'); const formData = new FormData(e.target); const data = Object.fromEntries(formData); // Ajuste requerido por el API if (data.imageUrl) { data.images = [data.imageUrl]; delete data.imageUrl; } repo.editProduct(productId, data) .then((response) => { console.log(response); // *console log* de validación }) .catch((err) => console.error(err)); }
¿Qué errores típicos corregir en el repositorio?
¿Cómo validar el flujo con una prueba rápida?
Habilidades y conceptos reforzados:
¿Tuviste algún reto con el mapeo de imágenes, el nombre del método o la captura del ID? Cuéntame en comentarios qué problemas encontraste al implementar el verbo put en el template y cómo lo resolviste.