Microservicios en PHP: por dónde empezar sin volverse loco
\n\n¿Alguna vez has mirado una aplicación monolítica en PHP que ha crecido hasta 200,000 líneas de código y has sentido que todo se te viene encima? Un solo commit y todo se rompe. Un error en el módulo del carrito y todo el sitio se cae. ¿Te suena familiar? Bienvenido al club de los supervivientes de monolitos.
\n\nPero hay buenas noticias: los microservicios en PHP no son ciencia espacial. Son simplemente un conjunto de aplicaciones pequeñas e independientes que se comunican entre sí por HTTP o a través de colas. Y sí, PHP es ideal para esto. ¿No lo crees? Laravel, Symfony e incluso PHP "puro" funcionan perfectamente como microservicios.
\n\nEn este artículo te mostraré la arquitectura de microservicios en PHP con ejemplos de código reales. Aprenderás por dónde empezar, qué herramientas elegir y cómo evitar errores comunes. ¡Vamos allá!
\n\nQué son los microservicios en PHP explicados de forma sencilla
\n\nImagina una pizzería. Un monolito es como un solo cocinero que lo hace todo: amasa la masa, corta el pepperoni, hornea, empaqueta, toma pedidos y lava los platos. Si el cocinero se enferma, la pizzería cierra. Los microservicios son como tener un cocinero para la masa, otro para los ingredientes, otro para el horno y un repartidor aparte. Cada uno trabaja de forma autónoma, y si el "cocinero de la masa" se enferma, los demás siguen funcionando.
\n\nEn el mundo PHP, esto se ve así:
\n\n- \n
- Servicio de usuarios — registro, inicio de sesión, perfiles \n
- Servicio de pedidos — creación, pago, estados \n
- Servicio de notificaciones — email, SMS, push \n
- API Gateway — punto de entrada único para los clientes \n
Cada servicio es una aplicación PHP independiente con su propia base de datos, su propio repositorio y su propia lógica. Y todo funciona en conjunto, formando una arquitectura de microservicios en PHP.
\n\n¿Cuándo deberías migrar a microservicios?
\n\nSeamos honestos: los microservicios no son una bala de plata. Si tienes 3,000 usuarios y 10 páginas, olvídalo. Necesitas un monolito. Pero si:
\n\n- \n
- Tu equipo de desarrollo ha crecido a 5 o más personas \n
- Desplegar cualquier cambio menor se siente como una operación de alto riesgo \n
- Una sola base de datos se ha convertido en un cuello de botella \n
- Diferentes partes de la aplicación requieren tecnologías distintas (por ejemplo, Elasticsearch para búsquedas y PostgreSQL para pedidos) \n
...entonces los microservicios en PHP son tu mejor opción.
\n\nPor dónde empezar: un microservicio básico en PHP
\n\nEmpecemos con algo sencillo. Vamos a crear un microservicio que devuelva una lista de usuarios. Será un microservicio REST API en PHP.
\n\nPaso 1: Estructura del proyecto
\n\nuser-service/\n├── public/\n│ └── index.php\n├── src/\n│ ├── Controllers/\n│ │ └── UserController.php\n│ ├── Models/\n│ │ └── User.php\n│ └── Services/\n│ └── UserService.php\n├── config/\n│ └── database.php\n├── composer.json\n└── .env\n\nPaso 2: Punto de entrada (index.php)
\n\n<?php\n// public/index.php\nrequire_once __DIR__ . '/../vendor/autoload.php';\n\nuse Symfony\\Component\\Dotenv\\Dotenv;\nuse App\\Controllers\\UserController;\n\n$dotenv = new Dotenv();\n$dotenv->load(__DIR__ . '/../.env');\n\n$uri = $_SERVER['REQUEST_URI'];\n$method = $_SERVER['REQUEST_METHOD'];\n\n// Enrutador simple\nif ($uri === '/api/users' && $method === 'GET') {\n $controller = new UserController();\n echo json_encode($controller->index());\n} elseif (preg_match('/\\/api\\/users\\/(\\d+)/', $uri, $matches) && $method === 'GET') {\n $controller = new UserController();\n echo json_encode($controller->show($matches[1]));\n} else {\n http_response_code(404);\n echo json_encode(['error' => 'Not found']);\n}\n\nPaso 3: Controlador
\n\n<?php\n// src/Controllers/UserController.php\nnamespace App\\Controllers;\n\nuse App\\Services\\UserService;\n\nclass UserController\n{\n