Esta é uma API desenvolvida em C# com ASP.NET Core para gerenciamento de cidades e alunos. O sistema permite a importação em lote de todas as cidades do brasil (2026) através de um arquivo CSV para um banco de dados MySQL, operações de CRUD para cidades, e a gestão de alunos com suporte a upload e conversão de fotos para Base64. A infraestrutura é totalmente orquestrada via Docker.
Desenvolvido com o objetivo de resolver o trabalho proposto pela disciplina Linguagens de Programação - 1° Bim. 2026.
- C# / ASP.NET Core: Framework principal da Web API.
- MySQL: Banco de dados relacional para persistência das cidades e alunos.
- Docker: Containerização e orquestração da API e do Banco de Dados.
- Swagger/OpenAPI: Documentação interativa e testes de endpoints.
O projeto foi dividido em três partes principais:
- Importação de dados de cidades via upload de arquivo
.csvdiretamente para o banco de dados. - Suporte a processamento em lote (parâmetro
usarLote) para arquivos extensos. - Operações de CRUD (Create, Read, Update, Delete) para as cidades.
- Filtros e agregações: contagem total de cidades, listagem de UFs e filtro de cidades por estado específico.
- Cadastro e consulta de entidades de alunos vinculados às cidades.
- Endpoint de upload para receber arquivos de imagem (foto do aluno) via
multipart/form-data. - Endpoint de visualização que retorna a foto armazenada do aluno codificada em string Base64.
- A API implementa o padrão OpenAPI, disponibilizando a interface do Swagger para consulta e teste de todos os contratos e rotas.
Abaixo está o resumo das rotas expostas pela aplicação.
| Método | Rota | Descrição |
|---|---|---|
POST |
/importar |
Importa cidades de um arquivo .csv (Suporta usarLote=true). |
GET |
/api/cidades |
Retorna todas as cidades cadastradas. |
POST |
/api/cidades |
Insere manualmente uma nova cidade. |
GET |
/api/cidades/{id} |
Retorna os detalhes de uma cidade específica pelo ID. |
PUT |
/api/cidades/{id} |
Altera os dados de uma cidade existente. |
DELETE |
/api/cidades/{id} |
Exclui uma cidade pelo ID. |
GET |
/total |
Retorna a quantidade total de cidades cadastradas. |
GET |
/estados |
Retorna a lista de todos os estados (UFs) cadastrados. |
GET |
/estado/{uf} |
Retorna uma lista de cidades filtrada pela sigla do estado. |
| Método | Rota | Descrição |
|---|---|---|
POST |
/Alunos |
Cria um novo registro de aluno. |
GET |
/Alunos/{id} |
Consulta um registro de aluno pelo ID. |
POST |
/Alunos/{id}/foto |
Recebe e armazena a foto do aluno via form-data. |
GET |
/Alunos/{id}/foto |
Retorna a foto do aluno codificada em formato Base64. |
Nota: Um arquivo de exemplo (cidade.csv) encontra-se na raiz deste projeto para testes de importação.
Para o endpoint /importar, o arquivo .csv deve conter a seguinte estrutura de colunas (com cabeçalho):
- CidadeId: Identificador único da cidade (Int).
- Nome: Nome da cidade (String).
- Sigla: Sigla do estado / UF (String).
- IBGEMunicipio: Código IBGE da cidade (Int).
- Latitude: Latitude da cidade (Double/Decimal).
- Longitude: Longitude da cidade (Double/Decimal).
- Clone o repositório:
git clone https://github.com/mateus-sm/WebAPI.git
Toda a infraestrutura do projeto, incluindo a inicialização e criação das tabelas do MySQL, está automatizada com Docker.
- Suba os contêineres:
Certifique-se de ter o Docker Desktop (ou Docker Engine) rodando na sua máquina. No terminal, na raiz do projeto (onde está o arquivo docker-compose.yml), execute:docker-compose up -d --build
O Docker fará o download da imagem do MySQL, criará o banco de dados cidades_db via init.sql e iniciará os serviços.
- Acesse a API:
Com os contêineres em execução, rode o projeto C# via Visual Studio ou método de preferencia.
Abra o navegador e acesse a URL mapeada na rota /doc.
Output bash ao rodar o projeto:info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5182 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\WebAPI
No caso acima o acesso seria em: http://localhost:5182/doc