Skip to content

Repository files navigation

⚙️ Backend Learning Lab

Laboratório de desenvolvimento Backend com C# e ASP.NET Core

API REST criada para estudar arquitetura Backend, CRUD, persistência de dados,
validação, autenticação JWT e documentação de endpoints.

C%23 .NET SQLite Swagger


📌 Sobre o projeto

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.


🎯 Objetivo

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.

✨ Funcionalidades

  • 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

🏗️ Arquitetura

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

Controllers

Recebem as requisições HTTP, validam o fluxo da operação e retornam as respostas da API.

DTOs

Definem os dados aceitos nas operações de criação, atualização e autenticação.

Services

Concentram as regras e operações utilizadas pela aplicação.

Repositories

Isolam o acesso e as operações relacionadas aos dados dos alunos.

Data

Contém o contexto do Entity Framework Core responsável pela comunicação com o banco de dados.

Middlewares

Centralizam o tratamento de exceções durante o processamento das requisições.


🔐 Autenticação e autorização

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_TOKEN

Os 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.


🛣️ Endpoints

Autenticação

Método Endpoint Descrição Autenticação
POST /auth/login Realiza o login e gera o token JWT Não

Alunos

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

📥 Exemplo de login

Requisição

POST /auth/login
Content-Type: application/json
{
  "email": "[email protected]",
  "senha": "senha-de-demonstracao"
}

Resposta esperada

{
  "mensagem": "Login realizado com sucesso",
  "token": "TOKEN_JWT"
}

👩‍🎓 Exemplo de cadastro de aluno

Requisição

POST /alunos
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
  "nome": "Nome do aluno"
}

Resposta esperada

{
  "id": 1,
  "nome": "Nome do aluno"
}

✅ Validação

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."
  ]
}

🚨 Tratamento de erros

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

💾 Persistência de dados

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.


📖 Documentação da API

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.


🛠️ Tecnologias e ferramentas

  • C#
  • .NET 8
  • ASP.NET Core
  • Entity Framework Core
  • SQLite
  • JWT Bearer Authentication
  • MiniValidation
  • Swagger
  • OpenAPI
  • Git
  • GitHub
  • Visual Studio Code

▶️ Executando localmente

Pré-requisitos

Instale:

  • .NET 8 SDK
  • Git

Clone o repositório

git clone https://github.com/joselysilva-dev/backend-learning-lab.git

Acesse a pasta

cd backend-learning-lab

Restaure as dependências

dotnet restore

Execute a aplicação

dotnet run

O terminal mostrará os endereços locais utilizados pela API.


⚙️ Configuração

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.


📚 Aprendizados

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.

🚧 Limites do projeto

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.


🔮 Próximos passos

  • 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

👩‍💻 Autora

Josely Silva Lima

Estudante do 2º semestre de Engenharia de Software
Desenvolvedora Backend e Full Stack em formação
Fundadora da Luara Digital

GitHub LinkedIn E-mail


Laboratório desenvolvido para registrar minha evolução prática em Backend.

About

Laboratório de estudos Backend com C#, .NET, ASP.NET Core, Entity Framework Core, SQLite e documentação Swagger.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages