Criando Uma API Rest Utilizando Django Rest Framework — Parte 3

Fonte: http://www.django-rest-framework.org/

Na segunda parte deste tutorial nós expandimos um pouco nossa aplicação e falei um pouco sobre autenticação e permissões. Nesta terceira parte falarei um pouco sobre django-filter, um sistema genérico para filtrar dados.

Até agora nossa API não aceita filtros, é possível somente buscar todos registros de uma tabela ou buscar um registro específico através de um id. Não podemos, por exemplo, filtrar a tabela albuns por data e pegar registros somente de 2017, ou ainda filtrar a tabela musics pelo campo seconds, retornando apenas músicas com mais de 300 segundos de duração. Uma API completa precisa oferecer este tipo de possibilidade, então vamos trabalhar!

Antes de prosseguir, dê uma olhada neste tutorial em que eu utilizo o Django OAuth Toolkit para prover autenticação na API. O OAuth é um padrão de autenticação muito popular e poderoso, irei utilizar ele na nossa API a partir de agora.

Instalando o Django-Filter

Existem vários pacotes django para lidar com filtros de dados, o que eu mais gosto é o django-filter pois é um dos mais populares, mais aderidos pela comunidade, existem atualizações constantes, é simples de usar e é flexível. Então optei por utilizá-lo aqui.

Para instalar o pacote execute o seguinte comando

$ pip install django-filter

Adicione as seguintes linhas em myapi/settings.py

Preparando as Views

Agora vamos configurar nossas views par aceitar os filtros através do django-filter. Para isso adicionamos as seguintes linhas em myapp/views.py

Sobrescrevemos a variável filter_backends configurando o DjangoFilterBackend como o filtro padrão dessa view. O campo filter_fields indica quais campos podem ser passados como filtros, nesse caso selecionamos todos os campos.

Agora vamos expandir os filtros para todas as views

Agora nossa API aceita filtros ! :)

Podemos testar os filtros requisitando que a API nos liste uma music com um determinado nome que é passado como parâmetro na url

$ curl -X GET http://localhost:8000/musics/?title=My+loving -H "Authorization: Bearer <your access token>" -H "Accept: application/json"

Customizando os Filtros

Agora é possível realizar filtros nos campos de todas as tabelas. Também é possível criar filtros customizados para, por exemplo, uma pesquisa retornar dados dentro de um determinado range de datas, vamos fazer isso agora.

Vamos criar um filtro customizado para filtrar os dados de albuns pela data, para isso insira o seguinte código em myapp/views.py

Agora podemos testar nosso filtro customizado passando os valores dos filtros na url :)

$ curl -X GET http://localhost:8000/musics/?date_gte=2009-12-01&date_lte=2010-02-01 -H "Authorization: Bearer <your access token>" -H "Accept: application/json"

Pronto! Agora temos uma API com Autenticação OAuth2.0, com filtros, serializadores, modelos e permissões.

Aguarde os próximos tópicos onde pretendo falar sobre testes automatizados e documentação da API. Se tiver alguma sugestão de assunto, deixe nos comentários também!

Todo código produzido nesse tutorial pode ser acompanhado em

Obrigado e até breve!

Like what you read? Give Marcos Rabaioli a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.