Con una API y autenticación listas, el siguiente paso es controlar qué expones en tu respuesta. Con la capa de transformación de Laravel, basada en API Resource, conviertes modelos de Eloquent en JSON preciso y seguro, mostrando solo los atributos necesarios y con nombres consistentes.
¿Cómo transformar respuestas JSON con api resource en Laravel?
Los API Resource permiten dar forma a los datos antes de enviarlos al cliente. Así evitas exponer todos los atributos del modelo y puedes tipar valores para mantener consistencia.
Crea un recurso con la terminal.
Define el método to array con los campos permitidos.
Usa el recurso en el controlador para el método show.
¿Cómo crear un recurso con php artisan?
Comando en la terminal:
php artisan make resource ProductResource
Estructura del recurso con tipado y claves en español:
Para un solo modelo: instancia el recurso y pásale el modelo.
Respuesta: obtienes los datos transformados en JSON.
// Ejemplo en ProductController@showreturnnewProductResource($product);
Ventaja: puedes cambiar etiquetas (por ejemplo, a español) sin afectar la lógica del modelo.
¿Cómo manejar colecciones y metadata con resource collection?
Cuando trabajas con listas, como en el método index, necesitas transformar colecciones de productos. Tienes dos opciones: usar el método estático collection del recurso o crear una colección propia para personalizar la metadata.
¿Cómo usar collection directamente?
Transforma una colección sin crear otra clase.
// En ProductController@indexreturnProductResource::collection($products);
Respuesta: obtienes un arreglo data con cada recurso transformado.
¿Cuándo crear un recurso tipo collection?
Cuando requieres metadata personalizada junto a los datos.
php artisan make resource ProductCollection
classProductCollectionextendsResourceCollection{publicfunctiontoArray($request){return['data'=>$this->collection,// 'meta' => [ ... ] // aquí puedes agregar metadata personalizada.];}public$collect=ProductResource::class;// aplica transformación a cada elemento.}
Uso en el controlador:
// En ProductController@indexreturnnewProductCollection($products);
Si no indicas la propiedad pública collect, verás los modelos sin la transformación individual.
Con collect apuntando a ProductResource, cada elemento se transforma con el mismo recurso.
¿Qué pasa con los tests al envolver en data?
Al cambiar la estructura a un arreglo data, los tests pueden fallar.
Ajuste sugerido: en el método de prueba, contar elementos dentro de la clave data (por ejemplo, usando la aserción que cuente esa clave).
¿Cómo validar y autorizar con form request en endpoints?
Para separar responsabilidades, mueve validaciones y autorizaciones a Form Request. Esto limpia el controlador y centraliza reglas.
¿Cómo crear e integrar form request?
Comandos en la terminal:
php artisan make request StoreProductRequest
php artisan make request UpdateProductRequest
Úsalos en el controlador en store y update.
Reglas de validación mínimas:
// En StoreProductRequest y UpdateProductRequestpublicfunctionrules(){return['nombre'=>'required','precio'=>'required',];}
¿Por qué aparece un 403 y cómo autorizar?
Si ves “la acción no está autorizada”, revisa authorize en el request.
Ventaja del Form Request: decidir quién puede ejecutar la petición.
publicfunctionauthorize(){returnout()->check();// permite a usuarios logueados.}
Tras autorizar y validar, los tests vuelven a pasar correctamente.
¿Tienes dudas sobre cómo aplicar estos API Resource y Form Request a tu entidad categoría o a otro modelo? Cuéntame tu caso en los comentarios y lo resolvemos juntos.