Microsserviços em PHP: por onde começar em 2024

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Microsserviços em PHP: por onde começar sem enlouquecer

\n\n

Você já olhou para uma aplicação PHP monolítica que cresceu para 200.000 linhas de código e sentiu um aperto no peito? Um commit — e tudo quebra. Um erro no módulo do carrinho — e o site inteiro cai. Parece familiar? Bem-vindo ao clube dos sobreviventes de monolíticos.

\n\n

Mas a boa notícia é: microsserviços em PHP não são um bicho de sete cabeças. São apenas um conjunto de pequenas aplicações independentes que se comunicam via HTTP ou filas. E sim, PHP é perfeito para isso. Não acredita? Laravel, Symfony e até mesmo PHP "puro" se saem muito bem como microsserviços.

\n\n

Neste artigo, vou mostrar a arquitetura de microsserviços em PHP com exemplos reais de código. Você vai aprender por onde começar, quais ferramentas escolher e como evitar as armadilhas comuns. Vamos nessa!

\n\n

O que são microsserviços em PHP em termos simples

\n\n

Imagine uma pizzaria. O monolítico é quando um único cozinheiro faz tudo: prepara a massa, corta o pepperoni, assa, embala, recebe pedidos e lava a louça. Se o cozinheiro fica doente — a pizzaria fecha. Microsserviços são quando você tem um cozinheiro só para a massa, outro para o recheio, outro para o forno e um entregador dedicado. Cada um trabalha de forma autônoma, e se o "cozinheiro da massa" adoece, os outros continuam funcionando.

\n\n

No mundo PHP, isso se parece com:

\n\n
    \n
  • Serviço de usuários — cadastro, login, perfis
  • \n
  • Serviço de pedidos — criação, pagamento, status
  • \n
  • Serviço de notificações — email, SMS, push
  • \n
  • API Gateway — ponto único de entrada para clientes
  • \n
\n\n

Cada serviço é uma aplicação PHP separada, com seu próprio banco de dados, repositório e lógica. E tudo funciona em conjunto, formando uma arquitetura de microsserviços em PHP.

\n\n

Quando migrar para microsserviços?

\n\n

Vamos ser honestos: microsserviços não são uma bala de prata. Se você tem 3 mil usuários e 10 páginas — esqueça. Você precisa de um monolítico. Mas se:

\n\n
    \n
  • A equipe de desenvolvimento cresceu para 5+ pessoas
  • \n
  • Você faz deploy de cada pequena alteração com medo
  • \n
  • Um único banco de dados se tornou um gargalo
  • \n
  • Diferentes partes da aplicação exigem tecnologias distintas (ex.: Elasticsearch para busca e PostgreSQL para pedidos)
  • \n
\n\n

...então microsserviços em PHP são a escolha certa.

\n\n

Por onde começar: um microsserviço básico em PHP

\n\n

Vamos começar com algo simples. Criaremos um microsserviço que retorna uma lista de usuários. Este será um microsserviço PHP REST API.

\n\n

Passo 1: Estrutura do projeto

\n\n
user-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\n

Passo 2: Ponto 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// Roteador simples\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\n

Passo 3: Controller

\n\n
<?php\n// src/Controllers/UserController.php\nnamespace App\\Controllers;\n\nuse App\\Services\\UserService;\n\nclass UserController\n{\n    public function index()\n    {\n        $service = new UserService();\n        return $service->getAllUsers();\n    }\n\n    public function show($id)\n    {\n        $service = new UserService();\n        return $service->getUserById($id);\n    }\n}
\n\n

Passo 4: Serviço

\n\n
<?php\n// src/Services/UserService.php\nnamespace App\\Services;\n\nuse App\\Models\\User;\n\nclass UserService\n{\n    public function getAllUsers(): array\n    {\n        // Aqui você usaria o Model para buscar do banco\n        return [\n            ['id' => 1, 'name' => 'João Silva', 'email' => 'joao@exemplo.com'],\n            ['id' => 2, 'name' => 'Maria Santos', 'email' => 'maria@exemplo.com']\n        ];\n    }\n\n    public function getUserById(int $id): ?array\n    {\n        // Busca no banco pelo ID\n        return ['id' => $id, 'name' => 'Usuário ' . $id, 'email' => 'usuario' . $id . '@exemplo.com'];\n    }\n}
\n\n

Comunicação entre microsserviços

\n\n

Agora que temos um microsserviço básico, precisamos que ele se comunique com outros serviços. As duas formas mais comuns são:

\n\n

1. HTTP/REST (síncrono)

\n\n

Um serviço chama o outro via requisições HTTP. Exemplo com cURL:

\n\n
<?php\n// Serviço de pedidos consultando o serviço de usuários\n$ch = curl_init('http://user-service/api/users/1');\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n$response = curl_exec($ch);\n$user = json_decode($response, true);\ncurl_close($ch);\n\necho $user['name']; // João Silva
\n\n

2. Mensageria (assíncrono)

\n\n

Usando RabbitMQ ou Redis para enviar mensagens entre serviços. Ideal para operações que não precisam de resposta imediata, como envio de emails.

\n\n
<?php\n// Publicando uma mensagem no RabbitMQ\nuse PhpAmqpLib\\Connection\\AMQPStreamConnection;\nuse PhpAmqpLib\\Message\\AMQPMessage;\n\n$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');\n$channel = $connection->channel();\n\n$channel->queue_declare('email_queue', false, true, false, false);\n\n$msg = new AMQPMessage(json_encode(['to' => 'usuario@exemplo.com', 'subject' => 'Bem-vindo!']));\n$channel->basic_publish($msg, '', 'email_queue');\n\n$channel->close();\n$connection->close();
\n\n

Ferramentas essenciais para microsserviços PHP

\n\n
    \n
  • Docker — para containerizar cada serviço
  • \n
  • RabbitMQ ou Redis — para filas de mensagens
  • \n
  • API Platform — para criar APIs REST rapidamente com Symfony
  • \n
  • Laravel Octane — para alta performance com microsserviços Laravel
  • \n
  • Prometheus + Grafana — para monitoramento
  • \n
\n\n

Conclusão

\n\n

Microsserviços em PHP não são um bicho-papão. Comece pequeno, com um serviço simples, e vá evoluindo. Lembre-se: a chave do sucesso é a simplicidade. Não tente implementar tudo de uma vez — um microsserviço bem feito vale mais que dez mal feitos.

\n\n

Agora é com você: pegue esse código, crie seu primeiro microsserviço e me conte como foi. Bons códigos!

Blogs

Book Recommendations