Comandos esenciales de Artisan
# Project setup
php artisan key:generate # Generate app key
php artisan migrate # Run migrations
php artisan db:seed # Seed database
# Make resources
php artisan make:model User -mfsc # Model, migration, factory, seeder, controller
php artisan make:controller APIController --api
php artisan make:request StoreUserRequest
php artisan make:middleware CheckToken
php artisan make:job SendEmail
php artisan make:test FeatureTest
php artisan make:rule ValidDomain
# Run code
php artisan tinker # Interactive shell
php artisan test # Run tests
php artisan queue:work # Process jobs
# Debugging
php artisan optimize # Cache config/routes/providers
php artisan route:list # Show all routes
php artisan config:show app # Show specific config
Codigos de estado HTTP habituales
| Código | Significado | Cuándo usarlo | |------|---------|------------| | 200 | OK | Petición correcta | | 201 | Created | Recurso creado | | 204 | No Content | Borrado correcto | | 400 | Bad Request | Formato de petición inválido | | 401 | Unauthorized | Falta autenticación o falló | | 403 | Forbidden | Autenticado pero sin acceso | | 404 | Not Found | El recurso no existe | | 422 | Unprocessable Entity | Falló la validación | | 429 | Too Many Requests | Límite de frecuencia alcanzado | | 500 | Server Error | Algo salió mal | | 503 | Unavailable | Servicio temporalmente caído |
Facades utiles
Auth::user() # Get current user
Cache::remember('key', 3600, fn()) # Cache with fallback
DB::select('SELECT *') # Raw query
Event::dispatch(new OrderShipped()) # Dispatch event
File::get('path/to/file') # Read file
Log::info('message', ['context']) # Log message
Mail::send(new OrderMailed()) # Send email
Queue::dispatch(new Job()) # Queue job
Route::get('/path', Action::class) # Define route
Storage::put('path', 'content') # Store file
Validator::make($data, $rules) # Validate data
Ayudantes de pruebas
$this->getJson('/api/endpoint') # HTTP GET
$this->postJson('/api/endpoint', $data)
$this->putJson('/api/endpoint', $data)
$this->deleteJson('/api/endpoint')
$response->assertStatus(200) # Check status
$response->assertJsonPath('key', value)
$response->assertJsonStructure([...])
$response->assertJson([...])
Apendice B: Guia de resolucion de problemas
P: Las pruebas van lentas
R: Ejecútalas en paralelo: php artisan test --parallel
P: Los jobs de la cola no se procesan
R: Comprueba que el worker está corriendo: php artisan queue:work. Después mira los jobs fallidos: php artisan queue:failed
P: Errores 404 en rutas válidas
R: Limpia la caché de rutas: php artisan route:clear y regenérala: php artisan route:cache
P: Errores de conexión a la base de datos
R: Revisa las credenciales del .env. Prueba la conexión con php artisan tinker → DB::connection()->getPdo()
P: La autenticación no funciona R: Verifica que el middleware está en el grupo de rutas, que el token se envía correctamente y que existe en la base de datos.
P: Problemas de memoria en operaciones largas R: Usa lotes para consultas grandes:
Model::chunk(1000, function ($records) {
// Process $records
});
P: Consultas N+1 matando el rendimiento
R: Usa precarga: Model::with(['relation'])->get(). Depura con DB::enableQueryLog() → dd(DB::getQueryLog())
P: Errores de CORS en el navegador
R: Comprueba que el middleware de CORS está registrado en bootstrap/app.php y verifica los orígenes permitidos en el .env.
P: El límite de frecuencia no funciona
R: Comprueba que la caché está bien configurada. Pruébala: Cache::put('test', true) → Cache::get('test')
P: Mensajes de validación en el idioma equivocado
R: Revisa APP_LOCALE en el .env y que existan los ficheros de traducción en lang/[locale]/.
Conclusion
Construir APIs rápidas y fiables es un camino. Ahora tienes el conocimiento base para:
- Diseñar arquitectura escalable con patrones probados
- Implementar seguridad desde el primer día, con autenticación y autorización
- Manejar errores con elegancia mediante un manejo centralizado de excepciones
- Optimizar el rendimiento con cacheo y compresión
- Probar a fondo con suites completas
- Monitorizar de verdad con registro y observabilidad
- Publicar con confianza mediante tuberías de integración y despliegue continuos
Ideas clave
- Convención sobre configuración: deja que los valores por defecto de Laravel te guíen
- Seguridad de tipos: usa los tipos de PHP 8.4 para atrapar fallos pronto
- Prueba todo: las pruebas automatizadas son tu red de seguridad
- Monitoriza en producción: no puedes arreglar lo que no puedes ver
- Planifica la evolución: diseña APIs que crezcan con elegancia
- Documenta bien: la documentación clara reduce la carga de soporte
- Segura por defecto: la seguridad es responsabilidad de todos
Siguientes pasos
- Empieza con un proyecto pequeño y aplica estos patrones
- Lee la documentación de Laravel para profundizar
- Estudia APIs de código abierto que funcionen bien
- Despliega a producción e itera
- Únete a la comunidad de Laravel y comparte lo que aprendas
¡Feliz publicación! 🚀
Recursos adicionales
Documentación oficial
Recursos de la comunidad
- Laravel News (news.laravel.com)
- Laracasts (laracasts.com) — tutoriales en vídeo
- Laravel Forum (laracasts.com/discuss)
- Stack Overflow (etiqueta: laravel)
Herramientas y servicios
- Laravel Forge — despliegue de servidores
- Laravel Vapor — despliegue serverless
- Sentry — seguimiento de errores
- Datadog — monitorización
Una guía práctica para publicar APIs REST en producción sin atascarse en complejidad innecesaria.
Este libro evoluciona junto a la Webplo License API, documentando patrones y decisiones reales tomadas en producción.