Olá, pessoal! Neste artigo, quero compartilhar com vocês o projeto FlixAPI, que consiste em uma API REST para o registro de filmes, gêneros, atores e avaliações, semelhante ao IMDb. Este projeto faz parte do curso Django Master e aborda o uso do Django REST Framework (DRF), uma das principais ferramentas para a construção de APIs com Python.

🔗 Acesse o projeto: FlixAPI

💻 Repositório no GitHub:FlixAPI no GitHub

O que é desenvolvido neste projeto?

No FlixAPI, criamos uma API completa, incluindo a implementação das seguintes rotas:

  • CRUD de Atores
  • CRUD de Gêneros
  • CRUD de Filmes
  • CRUD de Avaliações

Além disso, o projeto introduz diversos conceitos de backend, especificamente na construção de APIs usando o Django. Vamos explorar alguns desses conceitos nos próximos parágrafos.


API x API REST x API RESTful

Como diria Jack, vamos por partes! Primeiramente, vamos entender o que é uma API Web, pois existem vários tipos de APIs. Caso esse assunto lhe interesse, deixe um comentário para que eu possa fazer um artigo mais completo sobre as variações de APIs.

API é a sigla para Application Programming Interface (Interface de Programação de Aplicações), que pode ser resumida como um conjunto de protocolos (regras) que permitem a comunicação entre diferentes sistemas. No caso de uma API Web, essa comunicação ocorre por meio do protocolo HTTP.

Para padronizar essa comunicação e garantir que uma aplicação entenda corretamente os dados enviados por outra, surgiram algumas arquiteturas. As duas mais conhecidas são:

  • SOAP, que utiliza XML como formato de mensagem.
  • REST, que utiliza JSON, tornando-se o padrão predominante nos últimos anos.

Focando no REST, que é a arquitetura utilizada no FlixAPI, ele define uma série de regras para a construção de APIs utilizando solicitações HTTP como GET, POST, PUT e DELETE para interagir com recursos. Cada recurso é representado por um URI único, e as APIs REST são stateless, ou seja, não armazenam informações do cliente entre requisições.

E o que é RESTful?

Se uma API segue 100% das regras da arquitetura REST, ela pode ser chamada de RESTful. No entanto, a API que desenvolvi para este projeto não segue todas as regras do REST e, portanto, é classificada apenas como uma API REST.

Mas por que não seguir 100% das regras REST? A resposta é simples: BFF (Backend for Frontend).


O que é BFF (Backend for Frontend)?

Em uma API RESTful pura, cada recurso deve ser acessado individualmente por meio de sua URI específica. Por exemplo, ao buscar informações sobre um filme, o retorno seria algo assim:

/api/v1/movies/1/
{
    "id": 1,
    "title": "The Matrix",
    "genre":  1,
    "actors": [2, 3],
    "release_date": "1999-03-31",
    "rate": 3.0,
    "resume": "The Matrix is a 1999 science fiction action film written and directed by the Wachowskis."
}

Note que genre e actors retornam apenas os IDs dos respectivos recursos. Para obter todas as informações do filme, o frontend precisaria realizar chamadas adicionais para gêneros e atores, gerando uma quantidade excessiva de requisições. Agora imagine isso em uma API mais complexa!

Para otimizar essa comunicação, surgiu a abordagem BFF (Backend for Frontend). Com essa estratégia, a API retorna todas as informações necessárias em uma única requisição, reduzindo drasticamente o número de chamadas feitas pelo frontend.

Em sistemas mais complexos, podemos implementar o API Gateway, que faz a intermediação entre o frontend e os microserviços, consolidando as informações necessárias em uma única resposta.


Django REST Framework (DRF)

O Django REST Framework é a principal ferramenta para a criação de APIs com Django. Trata-se de um framework poderoso e versátil, amplamente utilizado na comunidade.

Para mais detalhes, acesse a documentação oficial: Django REST Framework.

Serializers

Os Serializers são componentes essenciais no DRF, pois permitem transformar objetos Django em JSON e vice-versa. Eles assumem um papel semelhante ao dos templates na arquitetura MTV do Django. Além disso, permitem validações, processamento e tratamento de dados antes do envio para os endpoints.

Permissões

O DRF também fornece um toolkit robusto para configurar permissões de acesso aos endpoints da API. Ou seja, permite validar se o token do usuário é válido e se ele tem permissão para acessar determinado recurso. No projeto, criei uma classe chamada GlobalDefaultPermission, que herda de rest_framework.permissions.BasePermission, garantindo segurança e controle de acesso.

Autenticação JWT

Seguindo as melhores práticas de segurança, este projeto implementa autenticação via JSON Web Token (JWT). Essa abordagem facilita a manutenção do sistema e melhora a segurança das requisições. Para essa integração, utilizei a biblioteca DRF Simple JWT.


Django Commands

Embora não seja exclusivo para APIs, o Django Commands é uma ferramenta extremamente útil. Neste projeto, utilizei comandos personalizados para importar entidades via CSV:

  • Importar atores
  • Importar gêneros
  • Importar filmes
  • Importar avaliações

Além disso, os Django Commands podem ser utilizados para outras finalidades, como extração de dados do banco de dados ou execução de funções específicas do sistema.


Conclusão

O FlixAPI é um projeto que aborda diversos conceitos fundamentais na construção de APIs com Django, explorando desde a estruturação REST até estratégias mais avançadas como BFF e API Gateway. Além disso, o projeto faz uso do Django REST Framework, autenticação JWT e Django Commands.

Se você deseja aprender mais sobre APIs, REST, Django e boas práticas no desenvolvimento backend, esse projeto é uma excelente oportunidade para aprofundar seus conhecimentos.

Ficou com dúvidas ou quer saber mais? Deixe um comentário!