Rafael Serra e Oliveira, abril 2021
Ver o enunciado para a especificação.
Antes de correr o código, é imperativo que o sistema esteja equipado com Python (^3.9.3) e os respetivos modules:
- requests (^2.22.0)
- django (^3.2)
- Na diretoria de topo do repositório (onde está este ficheiro), correr:
python manage.py runserver --insecure
IMPORTANTE: A opção --insecure
apenas significa que ficheiros estáticos são disponibilizados pelo Django diretamente, mesmo com DEBUG=False
. Como é um servidor local, não há quaisquer riscos acrescidos.
-
Aceder ao endereço http://127.0.0.1:8000/deipet/ através de qualquer browser1;
-
Ctrl-C para terminar a execução.
Não está apto para produção, por motivos evidentes.
Escolhas de Implementação
-
Ao contrário do que é usual, a API Petstore disponibilizada não expõe nenhuma forma de determinar quantos animais de estimação existem no total. Assim, implementando paginação na lista de animais, a única maneira de mostrar ao utilizador quantas páginas há ao todo a seria obter todos e contá-los — o que claramente é contra o propósito da própria Petstore fazer paginação e não seria escalável. Assim, foi tomada a decisão de mostrar apenas botões de navegação, sem a informação da quantidade total.
-
Pela mesma razão, não foi implementada uma funcionalidade de pesquisa nem de ordenação, pois tais operações apenas poderiam ser feitas por página em vez de no geral, o que seria pouco útil (ou até enganador) para o utilizador.
-
É de notar que alguns animais podem aparecer repetidos em páginas diferentes pelo que APARENTA2 ser um lapso na implementação da Petstore: o parâmetro
offset
afeta os IDs e não o número real de animais existentes, não contemplando que alguns IDs podem ter sido apagados. Por exemplo, havendo animais com IDs[0 1 2 3 50]
(tendo os animais4-49
sendo apagados), o#50
é listado tanto com(limit=20, offset=0)
(primeira página) como com(limit=20, offset=20)
(segunda página). -
Por limitação do próprio sistema de templates, não é possível usar o mesmo block "title" duas vezes (
<title />
e<h1 />
). Para evitar repetição, portanto, o template estrutural foi separado embase.html
elayout.html
, sendo o primeiro extremamente básico mas havendo assim uma workaround para esta limitação. Como bonus, o código fica (discutivelmente) melhor organizado.
1 Visto esta ser a única aplicação, para efeitos de conveniência, foi tomada a liberdade de criar um redirect, pelo que basta aceder ao endereço http://127.0.0.1:8000 sem qualquer path. ↩
2 Pouco tempo foi gasto a testar esta teoria; no entanto, é pouco provável tratar-se de um erro na presente implementação devido à sua simplicidade. ↩