API Gateway para PHP: unifique microsserviços sem complicação

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

Introdução: Por que seu projeto PHP precisa de um API Gateway

\n\n

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

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

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

O que é um API Gateway e por que você precisa dele como desenvolvedor PHP

\n\n

Um 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.

\n\n

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

Projetando um API Gateway simples em PHP

\n\n

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

Nosso 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/perfil vai buscar informações dos serviços Users e Orders
  • \n
\n\n

Passo 1: Configuração das rotas

\n\n

Crie o arquivo config.php para definir quais URLs levam a quais serviços:

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

Com essa configuração, o Gateway sabe exatamente para onde encaminhar cada requisição e quais regras aplicar.

Blogs

Book Recommendations