Projeto Final - API REST
Neste projeto, vocês deverão desenvolver uma API RESTful completa, estruturada e funcional. O projeto será feito em equipes com até três estudantes e simula o desenvolvimento de um serviço backend que atende clientes HTTP, manipulando dados próprios.
A equipe deverá propor uma solução para um dos temas do projeto, demonstrando a capacidade de criar uma API robusta e escalável.
🎯 Objetivos
Seção intitulada “🎯 Objetivos”- Projetar e desenvolver uma API RESTful completa, estruturada e funcional;
- Processar requisições JSON em rotas
GET,POST,PUTeDELETE; - Estruturar rotas e modelos com documentação adequada;
- Aplicar boas práticas de organização e codificação backend.
- Implementar requisitos específicos do tema escolhido.
🌐 Temas
Seção intitulada “🌐 Temas”Os temas abaixo são sugestões para os temas do projeto. A equipe deve escolher um tema e desenvolver uma API que atenda aos requisitos específicos do tema escolhido.
- Gestão Ambiental 🌍
- Logística e Transporte 🚚
- Vigilância de Saúde Pública 🏥
- Indústria e Manofatura 🏭
- Agricultura e Pecuária 🌾
- Energia e Sustentabilidade ⚡
- Educação e Aprendizado 📚
- Entretenimento e Cultura 🎭
- Esportes e Atividades Físicas 🏅
🧑💻 Aplicação
Seção intitulada “🧑💻 Aplicação”Além do tema, o projeto deverá conter pelo menos uma das aplicações práticas abaixo:
- Integração com Sistemas Físicos (IoT) 📡
- Exemplo: API para monitoramento de sensores ambientais, controle de dispositivos inteligentes, etc.
- Visualização de Dados 📈
- Exemplo: API para fornecer dados para dashboards, gráficos e relatórios interativos.
- Processamento de Dados em Tempo Real ⏱️
- Exemplo: API para processamento de dados de streaming, análise em tempo real, etc.
- Simulação de Cenários 🧬
- Exemplo: API para simular cenários de negócios, ambientais, sociais, etc.
✔️ Requisitos Obrigatórios do Projeto
Seção intitulada “✔️ Requisitos Obrigatórios do Projeto”Os requisitos obrigatórios do projeto descrevem os requisitos mínimos que o projeto deve atender. Não atender quaisquer um dos requisitos abaixo resulta em perda considerável de pontos, o que inclui a anulação completa do projeto.
- Implementa um serviço backend que atenda clientes HTTP;
- Estruturado em camadas (separação entre Controller e Service);
- Documentado usando o arquivo
README.mdna raiz do projeto; - Contém um arquivo
.envcom as variáveis de ambiente necessárias para o funcionamento do projeto; - Realiza a persistência de dados usando um sistema de gerenciamento de banco de dados;
- Deve possuir pelo menos três entidades, sendo duas delas com relação entre si (1:N, N:N);
- Cada entidade deve possuir um service para manipulação com métodos CRUD (
getOne,getAll,create,update,delete); - Todas as rotas devem retornar respostas apropriadas de sucesso e erro, utilizando códigos HTTP corretos (200, 201, 400, 404, 500, etc.);
- Implementa paginação e ordenação para o endpoint de listagem (
GET ALL); - Implementa filtros de busca para o endpoint de listagem (
GET ALL); - Utiliza DTOs (Data Transfer Objects) para entrada e saída de dados nas rotas;
- Valida os dados de entrada nas rotas, retornando erros apropriados para dados inválidos;
👍 Requisitos Extras do Projeto
Seção intitulada “👍 Requisitos Extras do Projeto”Os requisitos extras do projeto descrevem requisitos opcionais que podem ser implementados para melhorar o projeto e a avaliação final:
- Utiliza autenticação e autorização com JWT (ou outro método de autenticação seguro);
- Documenta as rotas do projeto usando documentação automatizada como o
Swagger; - Implementa testes automatizados para garantir a qualidade do código.
- Realiza o deploy do projeto em um ambiente de produção.
- Automatiza o processo de deploy usando ferramentas como Docker e Kubernetes.
👾 Cartas-Desafio
Seção intitulada “👾 Cartas-Desafio”Para cada equipe, será sorteado um conjunto de cartas-desafio. Cada carta-desafio representa um requisito adicional que a equipe deve OBRIGATORIAMENTE implementar no projeto.
A carta desafio será sorteada na semana 03 do projeto, e a equipe terá até a entrega final para implementar o requisito da carta desafio.
Cada carta terá uma história de usuário, que deverá ser interpretada e implementada pela equipe. A implementação da carta desafio deve ser feita de maneira criativa, integrando o requisito ao domínio do projeto.
Todas as cartas desafio podem ser encontradas aqui.
Atenção: Não devem ser criadas entidades exclusivamente para atender aos requisitos extras. Esses requisitos devem estar integrados ao domínio principal do projeto.
📅 Cronograma
Seção intitulada “📅 Cronograma”- Semana 01 - Lançamento do desafio, formação dos grupos e
Entrega 01 - Semana 02 - Desenvolvimento e
Entrega 02 - Semana 03 - Avaliação Individual Escrita II (Sorteio das Cartas Desafio)
- Semana 04 - Desenvolvimento
- Semana 05 -
Entrega Finale Apresentação Final
🗂️ Entregas
Seção intitulada “🗂️ Entregas”Entrega 01: Endereço do repositório git (Github, Gitlab…) com umREADME.mdcontendo tema e nome dos integrantes e documentação das principais funcionalidades da API e dos modelos (entidades).Entrega 02: Definição da arquitetura REST (rotas, verbos, códigos) e mapeamento das funcionalidades.Entrega Final: Entrega do projeto completo, incluindo código-fonte, documentação e implementação da carta-desafio.
Cada entrega deverá ser realizada em atividade aberta pelo professor no portal do estudante na semana específicada. Cada entrega deverá ser um documento na linguagem Markdown específico de cada entrega, exceto pela entrega final, que será o endereço do repositório. Toda documentação entregue será compilada e atualizada até a entrega final no README.md do repositório da equipe.
O endereço do repositório do projeto precisa ser público, acessível e clonável por qualquer pessoa usando a ferramenta git.
📝 Documentação
Seção intitulada “📝 Documentação”A documentação ser apresentada por meio de um arquivo de texto na raiz do projeto, chamado README.md, escrito em markdown e deverá conter:
- Descrição do projeto e dos integrantes do grupo;
- Descrição do problema;
- Tecnologias utilizadas;
- Limitações do projeto;
- Descrição de cada uma das entidades;
- Descrição de cada uma das rotas, contendo exemplos de requisições e respostas;
- Exemplos de erros HTTP;
- Descrição de como executar o projeto localmente;
- Outros conteúdos relevantes implementados no projeto.
O arquivo pode ser sub-dividido se necessário, mas deve conter o conteúdo acima. Para facilitar a leitura, utilize cabeçalhos de nível 2 (##) para cada seção. As descrições de entidades, rotas e exemplos podem ser removidas caso a equipe utilize uma documentação automatizada como o Swagger ou o Postman.
💬 Apresentação
Seção intitulada “💬 Apresentação”A apresentação será realizada em sala de aula, na data definida no cronograma. Todos os estudantes precisam estar presentes na apresentação para receberem nota. Em caso de falta, a nota será atribuída apenas aos presentes.
O tempo para organização da equipe e perguntas finais é de 5 minutos cada. Cada equipe terá no máximo 15 minutos para apresentar seu projeto.
Equipes que ultrapassarem esse tempo poderão ser penalizadas de acordo com o tempo excedido.
A apresentação deverá ser feita com o uso de um projetor e um computador do laboratório. É possível utilizar o próprio computador do estudante para apresentação.
Entre os pontos a serem abordados na apresentação, precisam estar inclusos:
- Apresentação dos integrantes do grupo e o papel de cada um no projeto;
- Descrição do projeto e do domínio do problema (contextualização da API);
- Demonstração do funcionamento do projeto (exemplos de requisições e respostas);
- Descrição breve da arquitetura do projeto (código-fonte);
- Apresentação breve da documentação do projeto (arquivo
README.md);
📊 Rubrica de Avaliação (Total: 10 pontos)
Seção intitulada “📊 Rubrica de Avaliação (Total: 10 pontos)”Cada critério vale 1,0 ponto se estiver
Excelente, 0,6 ponto se estiverSatisfatório, 0,2 se forInsatisfatórioe 0,0 ponto seNão Atende. Os critérios possuem multiplicadores indicados ao lado do nome. O resultado de cada critério será dado pela pontuação vezes o seu multiplicador. A média final será a soma de todos os multiplicadores ponderados pelo peso total.
| Critério (Peso) | Excelente (1,0 ponto) | Satisfatório (0,6 ponto) | Insatisfatório (0,2 ponto) | Não Atende (0,0 ponto) |
|---|---|---|---|---|
| Criatividade (2x) | Projeto criativo e inovador, com soluções originais para um problema | Projeto implementa uma solução comum para um problema | Não implementa uma solução adequada para o problema | Projeto não soluciona nenhum problema |
| Tema e Aplicação (1x) | Projeto aborda tema e aplicação definidos previamente | Projeto aborda tema e aplicação, mas de maneira superficial | Projeto não implementa a aplicação ou não aborda o tema adequadamente | Projeto não aborda o tema e aplicação definidos |
| Código (1x) | Código limpo, estruturado bem organizado | Código bem estruturado | Código com algumas inconsistências de organização | Código muitas inconsistências de organização |
| Documentação (2x) | Documentação completa, bem estruturada, com descrição das rotas, exemplos de uso e cuidado com a apresentação | Documentação completa e bem estruturada | Documentação parcial ou confusa | Ausência de documentação ou documentação incompleta |
| Apresentação (2x) | Apresentação didática, clara e direta | Apresentação contém os pontos solicitados | Não foram apresentados claramente alguns dos pontos de avaliação | Apresentação confusa ou sem objetivo |
| Cartas-Desafio (2x) | Implementação completa e criativa das cartas desafio | Implementou as cartas desafio, mas com algumas inconsistências | Implementou as cartas desafio com várias inconsistências | Equipe não entregou todas as cartas-desafio |
| Extra (2x) [adicional] | Implementação de mais de um requisito extra | Implementação de um requisito extra | Implementou um requisitos extra, mas de maneira parcial | Não implementa funcionalidades extras |