Como integrar a API de CPF em uma aplicação Symfony

Aprenda a consumir a API de consulta de CPF da CPFHub.io em uma aplicação Symfony com HttpClient, serviços e boas práticas.

Redação CPFHub.io
Redação CPFHub.io
··5 min de leitura
Como integrar a API de CPF em uma aplicação Symfony

Para integrar a API de CPF da CPFHub.io em uma aplicação Symfony, crie um serviço dedicado usando o componente HttpClient, configure a chave de API via variáveis de ambiente e injete o serviço nos controllers que precisam de validação. A integração leva menos de 30 minutos em projetos Symfony 6 ou 7.

Introdução

O Symfony é um dos frameworks PHP mais utilizados para aplicações empresariais e de grande porte. Se você precisa integrar a consulta de CPF via API em um projeto Symfony, este tutorial mostra como fazer isso de forma organizada, usando o componente HttpClient e boas práticas de arquitetura. A documentação oficial do Symfony detalha todas as opções de configuração do HttpClient — incluindo timeouts, retry automático e mock para testes.

Vamos integrar a API da CPFHub.io com injeção de dependência, tratamento de erros e exemplos prontos para uso.


Pré-requisitos

  • PHP 8.1+ com Symfony 6 ou 7 instalado.

  • Componente HttpClient (composer require symfony/http-client).

  • Uma conta gratuita na CPFHub.io com a API key gerada no painel.


1. Configure a chave de API no .env

Adicione a chave no arquivo .env:

CPFHUB_API_KEY=sua_chave_aqui
CPFHUB_BASE_URL=https://api.cpfhub.io

E declare no config/services.yaml:

parameters:
    cpfhub_api_key: '%env(CPFHUB_API_KEY)%'
    cpfhub_base_url: '%env(CPFHUB_BASE_URL)%'

2. Crie o serviço de consulta de CPF

Crie um serviço dedicado em src/Service/CpfHubService.php:

<?php

namespace App\Service;

use Symfony\Contracts\HttpClient\HttpClientInterface;

class CpfHubService
{
    public function __construct(
    private HttpClientInterface $httpClient,
    private string $cpfhubApiKey,
    private string $cpfhubBaseUrl,
    ) {}

    public function consultarCpf(string $cpf): array
    {
    $cpf = preg_replace('/\D/', '', $cpf);

    $response = $this->httpClient->request('GET', "{$this->cpfhubBaseUrl}/cpf/{$cpf}", [
    'headers' => [
    'x-api-key' => $this->cpfhubApiKey,
    'Accept' => 'application/json',
    ],
    ]);

    $statusCode = $response->getStatusCode();

    if ($statusCode !== 200) {
    throw new \RuntimeException("Erro na consulta de CPF: HTTP {$statusCode}");
    }

    return $response->toArray();
    }
}

Registre no config/services.yaml:

services:
    App\Service\CpfHubService:
    arguments:
    $cpfhubApiKey: '%cpfhub_api_key%'
    $cpfhubBaseUrl: '%cpfhub_base_url%'

3. Crie o controller

<?php

namespace App\Controller;

use App\Service\CpfHubService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class CpfController extends AbstractController
{
    #[Route('/api/cpf/{cpf}', name: 'consultar_cpf', methods: ['GET'])]
    public function consultar(string $cpf, CpfHubService $cpfHubService): JsonResponse
    {
    try {
    $resultado = $cpfHubService->consultarCpf($cpf);
    return $this->json($resultado);
    } catch (\RuntimeException $e) {
    return $this->json(['error' => $e->getMessage()], 400);
    }
    }
}

4. Tratamento de erros HTTP

Adicione tratamento granular no serviço para os códigos de resposta da API:

public function consultarCpf(string $cpf): array
{
    $cpf = preg_replace('/\D/', '', $cpf);

    $response = $this->httpClient->request('GET', "{$this->cpfhubBaseUrl}/cpf/{$cpf}", [
    'headers' => [
    'x-api-key' => $this->cpfhubApiKey,
    'Accept' => 'application/json',
    ],
    ]);

    return match ($response->getStatusCode()) {
    200 => $response->toArray(),
    400 => throw new \InvalidArgumentException('CPF com formato inválido'),
    401 => throw new \RuntimeException('Chave de API inválida ou ausente'),
    404 => throw new \RuntimeException('CPF não encontrado'),
    default => throw new \RuntimeException('Erro inesperado na API'),
    };
}

5. Exemplo de resposta

Ao acessar GET /api/cpf/12345678900, a resposta será:

{
    "success": true,
    "data": {
    "cpf": "12345678900",
    "name": "João da Silva",
    "nameUpper": "JOÃO DA SILVA",
    "gender": "M",
    "birthDate": "15/06/1990",
    "day": 15,
    "month": 6,
    "year": 1990
    }
}

6. Boas práticas

  • Variáveis de ambiente — Nunca hardcode a chave de API no código.

  • Injeção de dependência — Use o container do Symfony para gerenciar o serviço.

  • Timeout — Configure timeout no HttpClient para evitar requisições travadas. A API responde em ~900ms; um timeout de 10 a 15 segundos é adequado.

  • Cache — Para CPFs consultados repetidamente, use o componente Cache do Symfony.

  • Testes — Mock o HttpClient nos testes unitários para não consumir consultas reais.


Perguntas frequentes

Como configurar timeout no HttpClient do Symfony para a API CPFHub.io?

No config/services.yaml, configure o default_options do HttpClient com timeout: 10. Alternativamente, passe o parâmetro diretamente na chamada: $this->httpClient->request('GET', $url, ['timeout' => 10]). A API responde em ~900ms; 10 segundos dá margem suficiente sem travar requisições por tempo indeterminado.

Como mockar o CpfHubService nos testes funcionais do Symfony?

Use o MockHttpClient do Symfony com uma MockResponse contendo o JSON esperado. Registre o mock no container de teste via $this->getContainer()->set(HttpClientInterface::class, $mockClient). Assim, os testes não consomem consultas reais da cota mensal.

A API CPFHub.io retorna erro 429 quando o limite é atingido?

Não. Ao atingir o limite do plano gratuito (50 consultas/mês), a API continua respondendo normalmente com HTTP 200 e cobra R$0,15 por consulta adicional. Não há bloqueio nem HTTP 429. Por isso, o tratamento de 429 pode ser removido do switch/match — o fluxo de erro para essa situação não ocorre.

Como usar o componente Cache do Symfony para evitar consultas duplicadas à API?

Injete o CacheInterface no CpfHubService e armazene o resultado usando o CPF como chave de cache com TTL de 24 horas. Assim, um mesmo CPF consultado múltiplas vezes no dia consome apenas 1 consulta da cota, economizando créditos no plano gratuito.


Conclusão

Integrar a API da CPFHub.io em uma aplicação Symfony é direto: um serviço PHP com HttpClient, configuração via .env e injeção de dependência pelo container. Com o tratamento de erros correto e cache habilitado, a integração fica robusta para produção e econômica no consumo de cota.

O plano gratuito de 50 consultas por mês é ideal para começar — seja em staging ou em produção com volume baixo. Quando o projeto crescer, o upgrade para o plano Pro é transparente: mesmo endpoint, mesma chave de API, sem refatorar nada. Crie sua conta em cpfhub.io agora e tenha sua integração Symfony rodando em menos de 30 minutos, sem cartão de crédito.

CPFHub.io

Pronto para integrar a API?

50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.

Redação CPFHub.io

Sobre a redação

Redação CPFHub.io

Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.

WhatsAppFale conosco via WhatsApp