Pular para o conteúdo

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.

  • Projetar e desenvolver uma API RESTful completa, estruturada e funcional;
  • Processar requisições JSON em rotas GET, POST, PUT e DELETE;
  • 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.

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.

  1. Gestão Ambiental 🌍
  2. Logística e Transporte 🚚
  3. Vigilância de Saúde Pública 🏥
  4. Indústria e Manofatura 🏭
  5. Agricultura e Pecuária 🌾
  6. Energia e Sustentabilidade ⚡
  7. Educação e Aprendizado 📚
  8. Entretenimento e Cultura 🎭
  9. Esportes e Atividades Físicas 🏅

Além do tema, o projeto deverá conter pelo menos uma das aplicações práticas abaixo:

  1. Integração com Sistemas Físicos (IoT) 📡
    • Exemplo: API para monitoramento de sensores ambientais, controle de dispositivos inteligentes, etc.
  2. Visualização de Dados 📈
    • Exemplo: API para fornecer dados para dashboards, gráficos e relatórios interativos.
  3. Processamento de Dados em Tempo Real ⏱️
    • Exemplo: API para processamento de dados de streaming, análise em tempo real, etc.
  4. Simulação de Cenários 🧬
    • Exemplo: API para simular cenários de negócios, ambientais, sociais, etc.

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.md na raiz do projeto;
  • Contém um arquivo .env com 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;

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.

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.

  • 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 Final e Apresentação Final
  • Entrega 01: Endereço do repositório git (Github, Gitlab…) com um README.md contendo 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.

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.

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);

Cada critério vale 1,0 ponto se estiver Excelente, 0,6 ponto se estiver Satisfatório, 0,2 se for Insatisfatório e 0,0 ponto se Nã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 problemaProjeto implementa uma solução comum para um problemaNão implementa uma solução adequada para o problemaProjeto não soluciona nenhum problema
Tema e Aplicação (1x)Projeto aborda tema e aplicação definidos previamenteProjeto aborda tema e aplicação, mas de maneira superficialProjeto não implementa a aplicação ou não aborda o tema adequadamenteProjeto não aborda o tema e aplicação definidos
Código (1x)Código limpo, estruturado bem organizadoCódigo bem estruturadoCódigo com algumas inconsistências de organizaçãoCó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çãoDocumentação completa e bem estruturadaDocumentação parcial ou confusaAusência de documentação ou documentação incompleta
Apresentação (2x)Apresentação didática, clara e diretaApresentação contém os pontos solicitadosNão foram apresentados claramente alguns dos pontos de avaliaçãoApresentação confusa ou sem objetivo
Cartas-Desafio (2x)Implementação completa e criativa das cartas desafioImplementou as cartas desafio, mas com algumas inconsistênciasImplementou as cartas desafio com várias inconsistênciasEquipe não entregou todas as cartas-desafio
Extra (2x) [adicional]Implementação de mais de um requisito extraImplementação de um requisito extraImplementou um requisitos extra, mas de maneira parcialNão implementa funcionalidades extras