Introdução: Por que seu projeto PHP precisa de um API Gateway
\n\nImagine que você está construindo uma aplicação web moderna. Você tem um serviço de usuários em Laravel, um serviço de pedidos em Symfony, um serviço de pagamentos em PHP puro, além de integrações externas com CRM e um bot do Telegram. Os clientes (aplicativo mobile, SPA em React e o bom e velho site em jQuery) acessam endpoints diferentes, se confundem com tokens, e você passa toda semana corrigindo problemas de CORS.
\n\nParece familiar? Se sim, você precisa de um API Gateway — um ponto de entrada único para todos os seus serviços. Não é apenas um proxy, mas sim um verdadeiro gerenciador que cuida do roteamento, autenticação, cache e agregação de dados.
\n\nNeste artigo, vamos mostrar como criar um API Gateway em PHP simples e funcional, que pode ser implantado em qualquer hospedagem. Sem mágica, apenas código limpo e boas práticas para arquitetura de microsserviços em PHP.
\n\nO que é um API Gateway e por que você precisa dele como desenvolvedor PHP
\n\nUm API Gateway (gateway de API) é um servidor que recebe todas as requisições dos clientes e as redireciona para os microsserviços corretos. O cliente não sabe nada sobre a estrutura interna: ele simplesmente envia uma requisição para /api/usuarios, e o Gateway decide para onde enviá-la.
Principais funções do gateway:
\n- \n
- Roteamento — redirecionar requisições para diferentes serviços com base na URL ou cabeçalhos. \n
- Autenticação e autorização — validar tokens JWT, chaves de API, controlar acesso. \n
- Agregação — combinar dados de vários serviços em uma única resposta (ex.: perfil do usuário + seus últimos pedidos). \n
- Cache — reduzir a carga no backend armazenando em cache dados frequentemente solicitados. \n
- Rate limiting — proteger contra DDoS e sobrecarga dos serviços. \n
- Transformação de respostas — padronizar os dados para diferentes clientes. \n
As vantagens são claras: simplificação do lado do cliente, gerenciamento centralizado de segurança, e a possibilidade de alterar o backend sem notificar os clientes. A desvantagem é um ponto adicional de falha, mas isso é resolvido com a replicação do Gateway.
\n\nProjetando um API Gateway simples em PHP
\n\nVamos criar um Gateway em PHP puro, sem frameworks, para que você entenda a essência. Mas você pode adaptar facilmente o código para Laravel, Symfony ou Slim.
\n\nNosso gateway vai:
\n- \n
- Receber requisições em
/api/usuarios/*e redirecionar para o serviço Users (porta 8081) \n - Receber requisições em
/api/pedidos/*e redirecionar para o serviço Orders (porta 8082) \n - Validar o token JWT antes de permitir a requisição \n
- Armazenar em cache requisições GET por 60 segundos \n
- Agregar dados:
/api/perfilvai buscar informações dos serviços Users e Orders \n
Passo 1: Configuração das rotas
\n\nCrie o arquivo config.php para definir quais URLs levam a quais serviços:
<?php\n// config.php\nreturn [\n 'routes' => [\n '/api/usuarios' => [\n 'target' => 'http://127.0.0.1:8081',\n 'auth' => true, // requer JWT\n 'cache' => false // não armazenar em cache (dados pessoais)\n ],\n '/api/pedidos' => [\n 'target' => 'http://127.0.0.1:8082',\n 'auth' => true,\n 'cache' => 60 // cache de 60 segundos\n ],\n '/api/publico' => [\n 'target' => 'http://127.0.0.1:8083',\n 'auth' => false,\n 'cache' => 120\n ],\n '/api/perfil' => [ // endpoint agregado\n 'aggregate' => true,\n 'auth' => true,\n 'services' => [\n 'user' => 'http://127.0.0.1:8081/api/usuario',\n 'orders' => 'http://127.0.0.1:8082/api/pedido'\n ]\n ]\n ]\n];\n\n\nCom essa configuração, o Gateway sabe exatamente para onde encaminhar cada requisição e quais regras aplicar.