Ficha dweb2019-e2

Avaliação: Desenvolvimento de Aplicações Web

Desenvolvimento de Aplicações Web (MIEI)

O objectivo principal desta ficha é testar os conhecimentos obtidos durante as aulas no desenvolvimento de aplicações Web e outras tarefas afins.

Os resultados finais deverão ser enviados ao docente da seguinte forma:

  • Enviar por email para: jcr@di.uminho.pt
  • Colocar no subject/assunto: DWEB2018::Exame::Axxxxx
  • Em que Axxxxx corresponde ao número do aluno;
  • Enviar um ZIP com a resolução. Esse ZIP deverá conter um PR (project record/manifesto) que descreve o que se fez e lista os ficheiros que constituem a solução (à semelhança dos trabalhos de casa);
  • Para os exercícios em que recorrer a mais do que um servidor, por exemplo, servidor node e servidor Mongo, explique como se pode colocar a funcionar a sua App;
  • Em alternativa ao envio do ZIP por email, coloque-o no GitHub ou no WeTransfer e envie o respetivo link por email;
  • No fim, confirme com o docente que tudo foi enviado e recebido como deve ser.

Recursos:

Recursos disponíveis para a realização da ficha:

Exercícios:

  1. Prémios Nobel
  2. CLAV: Classificação e Avaliação da Informação Pública

O Prémio Nobel é um conjunto de seis prêmios internacionais anuais concedidos em várias categorias por instituições suecas e norueguesas, para reconhecer pessoas ou instituições que realizaram pesquisas, descobertas ou contribuições notáveis para a humanidade no ano imediatamente anterior ou no curso de suas atividades.

O último desejo do cientista sueco Alfred Nobel estabeleceu os prêmios em 1895. Os prêmios em Química, Literatura, Paz, Física e Fisiologia ou Medicina foram concedidos pela primeira vez em 1901. Em 1968, o Sveriges Riksbank estabeleceu o Prêmio de Ciências Econômicas em Memória de Alfred Nobel, que, embora não seja um Prêmio Nobel, tem sido comumente conhecido como o Prêmio Nobel de Economia. O Prêmio Nobel é amplamente considerado como o mais prestigiado prêmio disponível nas áreas de literatura, medicina, física, química, economia e ativismo pela paz.

Neste exercício, terás de:

  1. Converter o dataset disponibilizado nos recursos para um formato à tua escolha, ou usá-lo como está (há vários conversores online de XML para JSON e outros formatos), e colocá-lo no sistema que usarás para assegurar a sua persistência: ficheiro, MongoDB, json-server, etc;
  2. Criar um servidor nodejs que dê suporte à seguinte API de dados (note que não é necessário qualquer interface web):
    • GET /api/premios - Devolve a lista de prémios apenas com os campos "year" e "category";
    • GET /api/premios/:id - Devolve a informação completa de um prémio;
    • GET /api/categorias - Devolve a lista de categorias, sem repetições;
    • GET /api/premios?categoria=YYY - Devolve a lista de prémios que tenham o campo "category" com o valor "YYY";
    • GET /api/premios?categoria=YYY&data=AAAA - Devolve a lista de prémios que tenham o campo "category" com o valor "YYY" e o campo "year" com um valor superior a "AAAA";
    • GET /api/laureados - Devolve uma lista ordenada alfabeticamente por nome dos laureados com os campos correspondentes ao nome, ano do prémio e categoria.

A CLAV é uma plataforma em desenvolvimento no DI/UM em parceria e sob encomenda da Direção Geral do Livro, Arquivos e Bibliotecas (DGLAB) que visa a classificação e a avaliação de toda a documentação circulante na administração pública portuguesa.

Uma das faces visíveis do projeto é o catálogo dos processos da administração pública portuguesa, designado por Lista Consolidada.

Já se encontra disponível para consulta online: site de teste .

É sobre este catálogo que irás desenvolver este exercício.

A API de dados disponível contem entre outras as seguintes possibilidades:

  • GET http://clav-test.di.uminho.pt/api/classes - Devolve uma estratura hierárquica em JSON com a informação base de todas as classes/processos da Lista Consolidada. Note que, os níveis 1 e 2 correspondem a funções e subfunções da Administração Pública, existem essencialmente para arrumar a case e facilitar o acesso aos processo, o nível 3 corresponde ao processo e o nível 4 a uma divisão do processo quando, por determinado motivo partes da documentação desse processo têm conservações e destinos diferentes;
  • GET http://clav-test.di.uminho.pt/api/classes/nivel/3 - Devolve uma lista em JSON com a informação base de todos os processos;
  • GET http://clav-test.di.uminho.pt/api/classes/nivel/1 - Devolve uma lista em JSON dos primeiros níveis, funções da AP;
  • GET http://clav-test.di.uminho.pt/api/classes/nivel/2 - Devolve uma lista em JSON dos segundos níveis, subfunções da AP;
  • GET http://clav-test.di.uminho.pt/api/classes/lista - Devolve uma lista em JSON de todas as classes (linearização da árvore inicial);
  • GET http://clav-test.di.uminho.pt/api/classes/c100.10.001 - Devolve em JSON a informação base da classe com código: c100.10.001;
  • GET http://clav-test.di.uminho.pt/api/classes/c100.20/descendencia - Devolve uma lista em JSON das classes filhas da classe passada no pedido, neste caso, C100.20;
  • GET http://clav-test.di.uminho.pt/api/classes/c150.10.702/procRel - Uma classe de nível 3 pode ter relações com outra classe de nível 3. Este pedido devolve uma lista dos processos (classes de nível 3) que têm relações com o processo 150.10.702. São devolvidos: o identificador, o código, o título e o código da relação (deste é possível extrair a designação da relação, a sua parte final);

Desenvolve então as seguintes alíneas:

  1. Testa a API de dados com o Postman e dá resposta às seguintes questões:
    • Quantos processos (nível 3) e quais são (obtem uma lista em JSON; podes concatenar sublistas invocando várias queries), existem na descendência da classe 500?
    • Quantos subprocessos existem? (classes de nível 4)
    • Quantos processos (classes de nível 3) se encontram na descendência de 150.10?
    • Quantos processos (classes de nível 3) estão relacionados com 150.10.702?

Depois deste "aquecimento", desenvolve uma aplicação em nodejs que permita navegar nesta estrutura de classes. :

  1. Na página inicial, para além de um título e outra informação de contexto, deverá aparecer a lista de classes de nível 1;
  2. Todos os campos de informação com códigos de classes devem ser transformados em links que realizam pedidos à tua aplicação de nova página;
  3. Na página de cada classe, deve ser mostrada a informação base da classe, uma lista dos seus descendentes caso existam e, se a classe for de nível 3 uma lista dos processos relacionados (cada um destes deve ser um limk para o respetivo processo);
  4. Em todas as páginas deverá haver um link para voltar à página inicial e outro para a página anterior (nos casos em que justifique);
  5. Usa a tua imaginação e criatividade...