API REST criada para estudar arquitetura Backend, CRUD, persistência de dados,
validação, autenticação JWT e documentação de endpoints.
O Backend Learning Lab é um laboratório técnico criado durante meus estudos de desenvolvimento Backend no ecossistema Microsoft.
A aplicação começou como minha primeira API em ASP.NET Core e evoluiu para uma estrutura organizada em controllers, DTOs, serviços, repositórios, persistência de dados e middleware.
O projeto implementa um CRUD completo de alunos, autenticação com JWT, validação das requisições e documentação dos endpoints.
Status: projeto de aprendizagem em evolução.
O projeto foi desenvolvido para praticar:
- criação de APIs REST;
- desenvolvimento com C# e ASP.NET Core;
- organização do código em camadas;
- criação de endpoints;
- operações CRUD;
- persistência de dados;
- validação de entrada;
- autenticação e autorização;
- geração e validação de tokens JWT;
- tratamento centralizado de erros;
- documentação de APIs;
- controle de versão com Git e GitHub.
- Autenticação com JWT
- Geração de token de acesso
- Proteção dos endpoints de alunos
- Cadastro de alunos
- Listagem de alunos
- Consulta de aluno por identificador
- Atualização de aluno
- Exclusão de aluno
- Validação dos dados recebidos
- Persistência com Entity Framework Core
- Banco de dados SQLite
- Middleware global para tratamento de exceções
- Documentação com Swagger e OpenAPI
- Separação entre controllers, serviços e repositórios
- Injeção de dependências
O projeto está organizado em responsabilidades separadas:
backend-learning-lab/
├── Controllers/
│ ├── AlunosController.cs
│ └── AuthController.cs
├── Data/
│ └── AppDbContext.cs
├── DTOs/
│ ├── AlunoCreateDto.cs
│ ├── AlunoUpdateDto.cs
│ └── LoginDto.cs
├── Middlewares/
│ └── ExceptionMiddleware.cs
├── Models/
│ └── Aluno.cs
├── Repositories/
│ ├── IAlunoRepository.cs
│ └── AlunoRepository.cs
├── Services/
│ ├── AlunoService.cs
│ └── TokenService.cs
├── Properties/
├── Program.cs
├── MinhaPrimeiraApi.csproj
├── MinhaPrimeiraApi.http
├── openapi.json
├── appsettings.json
└── README.md
Recebem as requisições HTTP, validam o fluxo da operação e retornam as respostas da API.
Definem os dados aceitos nas operações de criação, atualização e autenticação.
Concentram as regras e operações utilizadas pela aplicação.
Isolam o acesso e as operações relacionadas aos dados dos alunos.
Contém o contexto do Entity Framework Core responsável pela comunicação com o banco de dados.
Centralizam o tratamento de exceções durante o processamento das requisições.
A API utiliza autenticação baseada em JSON Web Token — JWT.
O endpoint de login gera um token que deve ser enviado no cabeçalho das requisições protegidas:
Authorization: Bearer SEU_TOKENOs endpoints do recurso alunos utilizam a anotação:
[Authorize]Isso impede o acesso sem um token válido.
O login implementado possui finalidade educacional. Credenciais fixas de demonstração não devem ser utilizadas em aplicações reais ou em produção.
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
POST |
/auth/login |
Realiza o login e gera o token JWT | Não |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
GET |
/alunos |
Lista todos os alunos | JWT |
GET |
/alunos/{id} |
Consulta um aluno pelo identificador | JWT |
POST |
/alunos |
Cadastra um novo aluno | JWT |
PUT |
/alunos/{id} |
Atualiza os dados de um aluno | JWT |
DELETE |
/alunos/{id} |
Exclui um aluno | JWT |
POST /auth/login
Content-Type: application/json{
"email": "[email protected]",
"senha": "senha-de-demonstracao"
}{
"mensagem": "Login realizado com sucesso",
"token": "TOKEN_JWT"
}POST /alunos
Authorization: Bearer SEU_TOKEN
Content-Type: application/json{
"nome": "Nome do aluno"
}{
"id": 1,
"nome": "Nome do aluno"
}Os dados enviados para criação e atualização são recebidos por DTOs e validados com MiniValidation.
Quando os dados são inválidos, a API retorna uma resposta 400 Bad Request com os erros encontrados.
Exemplo:
{
"Nome": [
"O nome é obrigatório."
]
}A aplicação utiliza um middleware global para capturar exceções durante o processamento das requisições.
Esse recurso ajuda a:
- centralizar o tratamento de falhas;
- evitar repetição de código;
- registrar informações importantes;
- retornar respostas padronizadas;
- impedir a exposição desnecessária de detalhes internos.
A API também utiliza respostas HTTP adequadas, como:
| Código | Significado |
|---|---|
200 OK |
Operação realizada com sucesso |
201 Created |
Recurso criado |
204 No Content |
Recurso excluído |
400 Bad Request |
Dados inválidos |
401 Unauthorized |
Autenticação inválida ou ausente |
404 Not Found |
Recurso não encontrado |
500 Internal Server Error |
Erro interno da aplicação |
O projeto utiliza:
- Entity Framework Core;
AppDbContext;- SQLite;
- padrão Repository;
- injeção de dependências.
A configuração do contexto é registrada em Program.cs:
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlite(
builder.Configuration.GetConnectionString("DefaultConnection")
));O SQLite foi utilizado especificamente neste laboratório para praticar persistência com Entity Framework Core.
Durante o desenvolvimento, a API disponibiliza documentação pelo Swagger.
Após iniciar o projeto, a interface costuma ficar disponível em:
https://localhost:PORTA/swagger
O repositório também possui o arquivo:
openapi.json
Ele registra a especificação OpenAPI dos recursos da aplicação.
O Swagger está configurado para aceitar o token JWT pelo botão Authorize.
- C#
- .NET 8
- ASP.NET Core
- Entity Framework Core
- SQLite
- JWT Bearer Authentication
- MiniValidation
- Swagger
- OpenAPI
- Git
- GitHub
- Visual Studio Code
Instale:
- .NET 8 SDK
- Git
git clone https://github.com/joselysilva-dev/backend-learning-lab.gitcd backend-learning-labdotnet restoredotnet runO terminal mostrará os endereços locais utilizados pela API.
A aplicação utiliza configurações para:
- conexão com o banco de dados;
- chave de assinatura JWT;
- emissor do token;
- público do token.
Em projetos reais, informações sensíveis devem ser armazenadas por meio de:
- variáveis de ambiente;
- Secret Manager;
- serviços seguros de gerenciamento de segredos.
Nunca utilize credenciais ou chaves de produção diretamente no repositório.
Durante o desenvolvimento deste laboratório, foram praticados:
- fundamentos de APIs REST;
- criação de controllers;
- mapeamento de rotas;
- operações CRUD;
- códigos de status HTTP;
- criação e utilização de DTOs;
- validação de dados;
- injeção de dependências;
- separação de responsabilidades;
- padrão Repository;
- camada de serviços;
- persistência com Entity Framework Core;
- utilização do SQLite em um projeto;
- autenticação JWT;
- proteção de endpoints;
- middleware global de exceções;
- documentação com Swagger e OpenAPI;
- organização de um projeto Backend;
- versionamento com Git e GitHub.
Este é um laboratório educacional e ainda possui pontos que não são adequados para produção:
- autenticação com credenciais fixas de demonstração;
- ausência de cadastro real de usuários;
- ausência de hash de senha;
- banco SQLite local;
- ausência de testes automatizados completos;
- configuração voltada ao ambiente de aprendizagem.
Esses limites serão trabalhados conforme a evolução dos estudos.
- Criar cadastro real de usuários
- Armazenar senhas com hash
- Implementar perfis e permissões
- Adicionar testes automatizados
- Melhorar a validação dos DTOs
- Implementar paginação
- Adicionar filtros e pesquisa
- Criar migrations do banco
- Evoluir a documentação OpenAPI
- Preparar a aplicação para deploy
Josely Silva Lima
Estudante do 2º semestre de Engenharia de Software
Desenvolvedora Backend e Full Stack em formação
Fundadora da Luara Digital
Laboratório desenvolvido para registrar minha evolução prática em Backend.