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.