1. Guía rápida
Tu primer endpoint
Vamos a ver cómo crear rápidamente un endpoint CRUD completo utilizando los comandos del framework.
Paso 1: Crear la infraestructura legacy
El comando create-legacy-infrastructure genera la conexión con un recurso de Quartup:
php artesano create-legacy-infrastructure p-maes productos maesarti
Este comando crea dos archivos fundamentales:
src/Infrastructures/Legacy/PMaes/MaesartiProductos/MaesartiProductosModel.php: Define la conexión con la tabla de Quartupsrc/Infrastructures/Legacy/PMaes/MaesartiProductos/MaesartiProductosRepository.php: Proporciona métodos para operar con la tabla
¡Importante! No necesitas modificar estos archivos. Se generan listos para usar con la configuración correcta para la tabla especificada.
Paso 2: Crear el dominio
Una vez tenemos la infraestructura, creamos el dominio que expondrá nuestras operaciones CRUD:
php artesano create-domain Products PMaes_MaesartiProductos
Este comando genera automáticamente:
src/ApiLayer/Domains/Products/ProductsController.php: Controlador con endpoints RESTfulsrc/ApiLayer/Domains/Products/ProductsService.php: Servicio con lógica de negociosrc/ApiLayer/Domains/Products/ProductsRoutes.php: Rutas RESTful preconfiguradassrc/ApiLayer/Domains/Products/DTOs/ReqMaesartiProductosDTO.php: Para mapeo de peticionessrc/ApiLayer/Domains/Products/DTOs/ResMaesartiProductosDTO.php: Para mapeo de respuestas
Rutas generadas automáticamente:
GET /products # Listar todos los productos (con filtrado y paginación)
GET /products/:id # Ver un producto específico
POST /products # Crear un nuevo producto
PUT /products/:id # Actualizar un producto existente
DELETE /products/:id # Eliminar un producto
Estas rutas están completamente funcionales y listas para usar.
Paso 3: Personalizar los DTOs
El único paso necesario es configurar los DTOs para definir qué campos queremos mostrar y recibir:
// src/ApiLayer/Domains/Products/DTOs/ResMaesartiProductosDTO.php
public static $selectables = [
'nombre',
'cod_articulo',
'precio'
];
public function toArray(): array
{
return [
'id' => (string) $this->id,
'name' => (string) $this->nombre,
'code' => (string) $this->cod_articulo,
'price' => (float) $this->precio
];
}
// src/ApiLayer/Domains/Products/DTOs/ReqMaesartiProductosDTO.php
protected $mapFilters = [
'name' => 'nombre',
'code' => 'cod_articulo',
'price' => 'precio'
];
public function handle(array $data): InterfaceReqDto
{
$this->nombre = $data['name'] ?? null;
$this->cod_articulo = $data['code'] ?? null;
$this->precio = $data['price'] ?? null;
return $this;
}
Paso 4: Configurar validaciones (opcional)
Añadimos reglas de validación en el controlador si queremos validar los datos de entrada:
// src/ApiLayer/Domains/Products/ProductsController.php
$this->validations = [
'headers' => ['x-tienda' => 'required|string'],
'body' => [
'name' => 'required|string',
'code' => 'required|string',
'price' => 'required|numeric'
]
];
¡Y eso es todo!
Con estos sencillos pasos tienes un CRUD completo y funcional sin escribir casi código. Las principales ventajas:
- Rutas RESTful automáticamente configuradas
- Paginación integrada (
?page=2&itemsPerPage=10) - Filtrado dinámico (
?filters={"name":{"like":"Teclado"}}) - Ordenamiento (
?sortBy=["price"]&sortDesc=[true]) - Validación de datos de entrada
- Transacciones gestionadas automáticamente
- Errores manejados consistentemente
Por defecto, no necesitas tocar el controlador ni el servicio, ya que están preconfigurados para trabajar con los DTOs. Esto te permite crear APIs completas en cuestión de minutos.
En las siguientes secciones veremos en detalle cómo personalizar y extender esta funcionalidad básica.