API Resource Laravel para JSON preciso
Clase 7 de 33 • Curso Avanzado de Laravel
Contenido del curso
Entorno de trabajo y repaso de Laravel
Manejo de tu base de datos con Laravel
La terminal de Laravel
Eventos y tareas de Laravel
Manejo de errores
El corazón de Laravel
Creación de paquetes
- 26

Cómo crear paquetes Laravel con Composer
08:51 min - 27
Propiedades para manejo de dependencias
02:02 min - 28
Comprende el archivo composer.json
02:23 min - 29

Cómo Composer carga clases automáticamente
04:18 min - 30

Crear mis propios Services Providers
08:58 min - 31

Cómo publicar archivos con Service Provider
04:12 min - 32

Instalando paquetes desde GitHub con Composer
10:35 min - 33

Publicar tu paquete PHP en Packages
03:12 min
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:
class ProductResource { public function toArray($request) { return [ 'id' => (int) $this->id, 'nombre' => (string) $this->name, 'precio' => (float) $this->price, ]; } }
¿Cómo usar el recurso en el controlador?
- Para un solo modelo: instancia el recurso y pásale el modelo.
- Respuesta: obtienes los datos transformados en JSON.
// Ejemplo en ProductController@show return new ProductResource($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@index return ProductResource::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
class ProductCollection extends ResourceCollection { public function toArray($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@index return new ProductCollection($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 UpdateProductRequest public function rules() { 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.
public function authorize() { return out()->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.