API RESTful para consulta de municípios brasileiros por estado (UF) com suporte a Docker
O projeto inclui um frontend Vue.js moderno para visualização dos municípios brasileiros. O frontend é servido na porta 3000 e se comunica com a API na porta 8000.
Com o Docker em execução, acesse:
- Frontend: http://localhost:3000
- API: http://localhost:8000
Para mais detalhes sobre a estrutura e como desenvolver o frontend, consulte o README do Frontend.
- Docker e Docker Compose instalados
- Node.js 16+ (apenas para desenvolvimento do frontend)
- Git (opcional, apenas para clonar o repositório)
-
Clone o repositório:
git clone https://github.com/EricksonFerreira/idez_municipio.git cd idez_municipio -
Crie o arquivo
.envbaseado no.env.example:cp .env.example .env
-
Inicie os contêineres:
docker-compose up -d
-
Instale as dependências do Composer:
docker-compose exec app composer install -
Gere a chave da aplicação:
docker-compose exec app php artisan key:generate -
Instale as dependências do frontend e inicie o servidor de desenvolvimento:
cd frontend npm install npm run dev -
Acesse as aplicações em:
- Frontend: http://localhost:3000
- API: http://localhost:8000
-
Parar os contêineres:
docker-compose down
-
Ver logs da aplicação:
docker-compose logs -f app
-
Acessar o terminal do container da aplicação:
docker-compose exec app bash
O frontend é uma aplicação Vue.js 3 com as seguintes características:
- Vue 3 com Composition API
- Axios para requisições HTTP
- Tailwind CSS para estilização
- Vue Router para navegação
- Lodash para utilitários
- Interface responsiva e moderna
- Lista de municípios em grid com 4 colunas
- Scroll infinito com carregamento automático
- Filtro por estado (UF)
- Exibição de código IBGE e informações detalhadas
- Animações e transições suaves
# Instalar dependências
npm install
# Iniciar servidor de desenvolvimento
npm run dev
# Compilar para produção
npm run build
# Executar testes
npm run testEsta é uma API RESTful desenvolvida em Laravel 12 que fornece informações sobre municípios brasileiros por estado (UF). A API consome dados de fontes externas (IBGE e BrasilAPI) e os disponibiliza em um formato padronizado, com suporte a paginação e cache para melhor desempenho.
- Consulta de municípios por UF
- Paginação de resultados
- Cache de respostas para melhor desempenho
- Suporte a múltiplos provedores de dados (IBGE, BrasilAPI)
- Documentação OpenAPI (Swagger) completa
- Testes automatizados
- IBGE - Dados oficiais do Instituto Brasileiro de Geografia e Estatística
- BrasilAPI - Dados fornecidos pela BrasilAPI
Por padrão, o sistema utiliza o provedor configurado na variável de ambiente
MUNICIPIOS_PROVIDER
- PHP 8.1 ou superior
- Composer
- Extensões PHP necessárias: BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PCRE, PDO, Tokenizer, XML
-
Clone o repositório:
git clone https://github.com/EricksonFerreira/idez_municipio.git cd idez_municipio -
Instale as dependências:
composer install
-
Configure o ambiente:
cp .env.example .env php artisan key:generate
-
Configure o provedor de municípios no arquivo
.env:MUNICIPIOS_PROVIDER=IBGE # ou BRASILAPI
-
(Opcional) Para desenvolvimento, você pode desativar a verificação SSL:
MUNICIPIOS_VERIFY_SSL=false
# Inicie o servidor de desenvolvimento
php artisan serve
# Execute os testes
php artisan testA documentação interativa da API está disponível em /docs após a instalação. A documentação é gerada automaticamente a partir das anotações do código-fonte. OpenAPI (Swagger). Você pode visualizá-la de duas formas:
Visualizar online: Importe o arquivo docs/openapi.yaml em ferramentas como:
GET /api/municipios/{uf}
Parâmetros de URL:
uf(obrigatório): Sigla da Unidade Federativa (2 caracteres)
Parâmetros de consulta:
page(opcional, padrão: 1): Número da páginaper_page(opcional, padrão: 10, máximo: 100): Itens por página
Exemplo de requisição:
curl -X GET "http://localhost:8000/api/municipios/PE?page=1&per_page=5" \
-H "Accept: application/json"Exemplo de resposta (200 OK):
{
"current_page": 1,
"data": [
{
"name": "Recife",
"ibge_code": "2611606"
},
{
"name": "Olinda",
"ibge_code": "2609600"
}
],
"first_page_url": "http://localhost:8000/api/municipios/PE?page=1",
"from": 1,
"last_page": 1,
"last_page_url": "http://localhost:8000/api/municipios/PE?page=1",
"links": [
{
"url": null,
"label": "« Anterior",
"active": false
},
{
"url": "http://localhost:8000/api/municipios/PE?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Próximo »",
"active": false
}
],
"next_page_url": null,
"path": "http://localhost:8000/api/municipios/PE",
"per_page": 10,
"prev_page_url": null,
"to": 2,
"total": 2
}Códigos de status HTTP:
- 200: Sucesso
- 400: Formato de UF inválido
- 404: Nenhum município encontrado para a UF especificada
- 500: Erro interno do servidor
O projeto utiliza o framework de testes Pest PHP para testes unitários e de integração.
# Executar todos os testes
php artisan test
# Executar apenas testes unitários
php artisan test --testsuite=Unit
# Executar apenas testes de integração
php artisan test --testsuite=Feature
# Gerar relatório de cobertura de código (requer Xdebug)
XDEBUG_MODE=coverage php artisan test --coverage-html=coverageContribuições são bem-vindas! Siga estes passos para contribuir:
- Faça um Fork do projeto
- Crie uma Branch para sua Feature (
git checkout -b feature/AmazingFeature) - Adicione suas alterações (
git add .) - Faça o Commit das suas alterações (
git commit -m 'Add some AmazingFeature') - Faça o Push para a Branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
O Laravel possui uma documentação extensiva e completa, além de uma biblioteca de tutoriais em vídeo, cobrindo todos os aspectos do framework.
Se você prefere aprender assistindo, o Laracasts oferece milhares de tutoriais em vídeo sobre Laravel, PHP moderno, testes e muito mais.
Se você descobrir uma vulnerabilidade de segurança, por favor envie um e-mail para o mantenedor do projeto. Todas as vulnerabilidades de segurança serão prontamente tratadas.
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.