-
Notifications
You must be signed in to change notification settings - Fork 3
PI 2021 1 Trab P1
Licenciatura em Engenharia Informática Redes e Telecomunicações
Programação na Internet
Semestre de Inverno de 2020/2021 – 1ª Parte do Trabalho Prático
A avaliação da componente prática da disciplina de Programação na Internet será realizada com base na aplicação COVIDA (Chelas Open VIDeogame Application), a ser desenvolvida ao longo do semestre. A aplicação fornece acesso, através de uma interface web (hipermédia), a algumas das funcionalidades disponibilizadas pelo sítio IGDB, fazendo para esse efeito uso da sua Web API: https://www.igdb.com/api. Para ter acesso a esta API, cada grupo tem de criar uma conta no Twitch e seguir os passos descritos aqui de modo a autenticar cada pedido da forma indicada aqui
O desenvolvimento da aplicação COVIDA é faseado em três enunciados (Parte 1, Parte 2 e Parte 3). Em cada enunciado é definida a data limite de entrega da solução, um detalhe não negociável. A entrega é realizada através da criação da tag ParteX no repositório GitHub do grupo, onde X corresponde ao número da parte a entregar.
Para cada funcionalidade da aplicação COVIDA deve ser definida a rota HTTP correspondente que a implementa. A descrição de todos endpoints da aplicação devem constar no wiki do repositório na forma de documentação da API (podem-se basear na documentação da API do Github. No repositório deve ainda constar um ficheiro com o script de testes de integração que valide o correcto atendimento das rotas da aplicação. Deve ainda incluir as instruções de execução do script de testes de integração.
Na documentação de cada funcionalidade deve no mínimo constar: o tipo de pedido HTTP, o respetivo Uri, o formato e conteúdo do pedido (caso exista) e o formato e conteúdo da resposta. Resumo dos artefactos a submeter na entrega:
- Directoria node.js com a aplicação COVIDA
- Wiki com a documentação da API da aplicação COVIDA
- Conjunto de testes à API da aplicação COVIDA
Data limite de entrega da 1ª parte: 06/12/2020-23h59.
Desenvolver uma aplicação Web que disponibiliza uma Web API que segue os princípios REST, com respostas em formato Json e que suporta as seguintes funcionalidades:
- Obter a lista dos jogos mais populares
- Pesquisar jogos pelo nome
- Gerir grupos de jogos favoritos
- Criar grupo atribuindo-lhe um nome e descrição
- Editar grupo, alterando o seu nome e descrição
- Listar todos os grupos
- Obter os detalhes de um grupo, com o seu nome, descrição e nomes dos jogos que o constituem.
- Adicionar um jogo a um grupo
- Remover um jogo de um grupo
- Obter os jogos de um grupo que têm uma votação média (total_rating) entre dois valores (mínimo e máximo) entre 0 e 100, sendo estes valores parametrizáveis no pedido. Os jogos vêm ordenadas por ordem decrescente da votação média.
A aplicação devem ser desenvolvida com a tecnologia Node.js. Para o atendimento de pedidos HTTP deve ser usado o módulo express. Para realização de pedidos, pode ser usado o módulo http ou em alternativa o módulo urllib.
A API IGDB é usada para obtenção de dados (consulta) sobre os jogos. Desta API, devem ser usados os seguintes endpoints:
Para entender o modo de funcionamento da API devem, pelo menos, ler as seguintes secções da documentação:
Os dados que são próprios da aplicação, que podem ser criados alterados e apagados, nomeadamente toda a gestão de grupos, devem ser guardados em memória.
Qualquer um dos módulos base do Node.js pode ser usado. Além destes, nesta 1ª parte do trabalho, APENASpodem ser usados os seguintes módulos:
- express - Atendimento de pedidos HTTP
- body-parser
- urllib – Realização de pedidos HTTP
- debug – Mensagens de debug
- mocha ou jest – Testes unitários
- frisby - Testes de integração.
Qualquer outro módulo que pretenda usar, deve ser previamente debatido e autorizado pelo respetivo docente.
Todos os pedidos PUT e POST devem enviar os seus dados no corpo do pedido (body) e não na query string. A aplicação servidora deve ser constituída por pelo menos 5 módulos Node:
-
covida-server.js
- ficheiro que constitui o ponto de entrada na aplicação servidora -
covida-web-api.js
- implementação dos rotas HTTP que constituem a API REST da aplicação Web -
covida-services.js
- implementação da lógica de cada uma das funcionalidades da aplicação -
igdb-data.js
- acesso à API IGDB. -
covida-db.js
- acesso ao repositório em memória.
As dependência entre estes módulos é a seguinte:
covida-server.js -> covida-web-api.js -> covida-services.js -> igdb-data.js -> covida-db.js
A metodologia de desenvolvimento da aplicação servidora deve ser a seguinte e por esta ordem:
-
Desenhar e documentar as rotas da API (tipo de pedido HTTP + URL+exemplo de conteúdo da resposta) no wiki do repositório do grupo
-
Criar testes de integração que testam as rotas da API
-
Implementar o módulo de entrada da aplicação servidora:
covida-server.js
. Para este módulo não é necessário criar testes unitários, uma vez que este não deve implementar qualquer lógica que não seja receber alguns argumentos da linha de comando (configuração), iniciar todos os módulos e fornecer as respetivas dependências e iniciar o servidor web. Este módulo pode ir sendo construído à medida que vão sendo implementadas cada uma das rotas em covida-web-api.js. -
No módulo
covida-web-api.js
implementar as rotas da API, uma a uma.- Para cada rota implementada, utilizar os testes de integração para verificar o correto funcionamento dessa rota.
- Apenas passar à implementação da próxima rota quando a anterior estiver completamente implementada e testada.
- Para cada rota criar um teste de integração que a valida.
- Nesta fase da implementação do módulo
covida-web-api.js
usar dados locais (mock docovida-service.js
), ou seja, os testes deve ser realizados sem acesso à API do IGDB nem ao repositório.
-
Implementar os serviços da aplicação no módulo covida-services.js.
- Seguir uma abordagem semelhante à utilizada em covida-web-api.js no desenvolvimento das funcionalidades deste módulo e respetivos testes unitários.
- À semelhança do módulo covida-services.js os testes unitários devem ser executados sem acesso à API do IGDB nem ao repositório de dados em memória (mocks de igdb-data.js e covida-db.js).
-
Implementar os módulos de acesso a dados:
-
igdb-data.js
- acesso à API TMDb. -
covida-db.js
- acesso ao repositório em memória.
-