kamoca / fallback-cep-api
Fallback de chamadas para múltiplas APIs de CEP
Installs: 40
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/kamoca/fallback-cep-api
Requires
- php: ^8.2
- illuminate/support: ^12.0
README
Um pacote Laravel robusto e confiável para consulta de CEP com fallback automático entre múltiplos provedores de API. Nunca mais perca uma consulta por falha de API! 🚀
📖 Documentação Completa | 🚀 Guia de Instalação | 📋 Changelog
✨ Características
- 🔄 Fallback automático entre provedores
- ⚡ Configuração de prioridades para otimizar performance
- 🌐 Múltiplos provedores suportados (ViaCEP, BrasilAPI)
- 🛠️ Fácil configuração via arquivo de config
- 🌍 Suporte a internacionalização (PT-BR e EN)
- 📦 Auto-discovery do Laravel
- 🧪 Padronização de resposta entre provedores
📋 Requisitos
Requisitos Mínimos
- PHP: 8.2 ou superior
- Laravel: 12.20 ou superior
- Extensões PHP:
- curl(para requisições HTTP)
- json(para processamento JSON)
- mbstring(para manipulação de strings)
 
Dependências do Composer
- illuminate/support: ^12.20
- illuminate/http: Incluído no Laravel
Compatibilidade
| Laravel | PHP | Status | 
|---|---|---|
| 12.x | 8.2+ | ✅ Suportado | 
| 11.x | 8.1+ | ⚠️ Não testado | 
| 10.x | 8.0+ | ❌ Não suportado | 
🚀 Instalação
Instale o pacote via Composer:
composer require kamoca/fallback-cep-api
Publicar Configuração
Publique o arquivo de configuração para personalizar o comportamento:
php artisan vendor:publish --tag=cep-config
Isso criará o arquivo config/cep.php em seu projeto.
Publicar Traduções (Opcional)
Para personalizar as mensagens de erro:
php artisan vendor:publish --tag=fallback-cep-translations
⚙️ Configuração
O arquivo config/cep.php permite configurar todos os aspectos do pacote:
Variáveis de Ambiente
Adicione essas variáveis ao seu .env para configurar facilmente:
# Configurações do ViaCEP FALLBACK_CEP_API_VIA_CEP_ENABLED=true FALLBACK_CEP_API_VIA_CEP_PRIORITY=1 # Configurações do BrasilAPI FALLBACK_CEP_API_BRASIL_API_ENABLED=true FALLBACK_CEP_API_BRASIL_API_PRIORITY=2
🔧 Como Usar
Usando o Helper do Container
<?php use Kamoca\FallbackCepApi\CepResolver; use Kamoca\FallbackCepApi\Facade\Cep; /** @var CepResolver $cepResolver */ $cepResolver = app(CepResolver::class); $address = $cepResolver->resolve('01310-100'); /** @var CepResolver $cepResolver */ $cepResolver = app()->make(CepResolver::class); $address = $cepResolver->resolve('01310-100'); $address = Cep::resolve('01310-100');
🌍 Internacionalização
O pacote vem com suporte para português brasileiro e inglês. As mensagens de erro são traduzidas automaticamente baseado no locale da aplicação.
Namespace de Tradução
Use o namespace fallback-cep para acessar as traduções:
__( 'fallback-cep.error.validation.missing_key', ['key' => 'cep'] ) __( 'fallback-cep.error.runtime.request_failed', [ 'cep' => '01310100', 'provider' => 'ViaCep', 'error' => 'Network timeout' ] )
🏗️ Arquitetura
Provedores Suportados
- ViaCEP (via_cep) - https://viacep.com.br
- BrasilAPI (brasil_api) - https://brasilapi.com.br
Como Funciona o Fallback
- Os provedores são ordenados por prioridade (menor número = maior prioridade)
- A consulta começa pelo provedor de maior prioridade
- Se falhar, automaticamente tenta o próximo provedor
- Continua até encontrar uma resposta válida
- Se todos falharem, lança uma exceção informativa
Estrutura das Classes
CepResolver (Classe principal)
├── BaseCepProvider (Classe base)
├── ViaCepProvider (Implementação específica)
└── BrasilApiProvider (Implementação específica)
Adicionando Novos Provedores
Para adicionar um novo provedor, siga estes passos:
- Crie uma nova classe que implemente CepProviderContract:
<?php namespace Kamoca\FallbackCepApi\Providers; use Kamoca\FallbackCepApi\Contracts\CepProviderContract; class NovoProvider extends BaseCepProvider implements CepProviderContract { public function resolve(string $cep): array { // Lógica para fazer a requisição } public function transform(array $data): array { return [ 'cep' => $data['...'], 'rua' => $data['...'], 'bairro' => $data['...'], 'cidade' => $data['...'], 'uf' => $data['...'], 'provider' => 'NovoProvider', ]; } }
- Configure no arquivo config/cep.php:
'providers' => [ // ... outros provedores 'novo_provider' => [ 'enabled' => env('FALLBACK_CEP_API_NOVO_ENABLED', true), 'priority' => (int) env('FALLBACK_CEP_API_NOVO_PRIORITY', 3), 'class' => \Kamoca\FallbackCepApi\Providers\NovoProvider::class, ], ],
- Adicione as variáveis de ambiente no .env(opcional):
FALLBACK_CEP_API_NOVO_ENABLED=true FALLBACK_CEP_API_NOVO_PRIORITY=3
🧪 Testes
Nota: Este pacote ainda não possui uma suíte de testes implementada. Contribuições são bem-vindas! 🤝
Para executar testes (quando implementados):
composer test
🔧 Troubleshooting
Problemas Comuns
1. "Class 'Kamoca\FallbackCepApi\CepResolver' not found"
Solução: Verifique se o auto-discovery está funcionando:
php artisan package:discover php artisan config:clear composer dump-autoload
2. "All providers failed to resolve CEP"
Possíveis causas:
- CEP inexistente ou inválido
- Problemas de conectividade
- APIs dos provedores fora do ar
Solução: Verifique os logs e teste manualmente as URLs dos provedores.
3. Configuração não está sendo aplicada
Solução: Publique e limpe as configurações:
php artisan vendor:publish --tag=cep-config --force php artisan config:clear
🤝 Contribuindo
Contribuições são muito bem-vindas! Para contribuir:
- Faça um Fork do projeto
- Crie sua Feature Branch (git checkout -b feature/AmazingFeature)
- Commit suas mudanças (git commit -m 'Add some AmazingFeature')
- Push para a Branch (git push origin feature/AmazingFeature)
- Abra um Pull Request
📝 Licença
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
👨💻 Autor
Kauan Morinel Calheiro
- 📧 Email: kauan.calheiro@universo.univates.br
- 🐙 GitHub: @KauanCalheiro