Alura > Cursos de Programação > Cursos de Python > Conteúdos de Python > Primeiras aulas do curso API com Django 3: Versionamento, cabeçalhos e CORS

API com Django 3: Versionamento, cabeçalhos e CORS

Versionamento - Apresentação

Meu nome é Guilherme Lima e seja muito bem-vindo ao treinamento de Django REST Framework: Versionamento de API. O que nós vamos fazer nesse curso?

Nesse curso vamos pegar o modelo do projeto criado no curso 1 de API, só que com algumas alterações que vamos ver e vamos aprender como criar versionamento de API, como eu atualizo a minha API sem perder os endpoints que já estavam funcionando.

Vamos aprender também como lidar com níveis de permissões diferentes na nossa API. Então um determinado usuário vai poder realizar certas ações, outro usuário vai fazer outras ações, como fazemos isso aqui no Django REST.

Vamos entender também como lidar com permissões de uma forma um pouco diferente, como conseguimos limitar o número de requisições de um determinado recurso da nossa API ou o uso até da nossa API mesmo. Então eu vou falar: “Se for um usuário anônimo, vou permitir 50 requisições, cinco requisições”. Vamos aprender isso nesse curso também.

E vamos aprender sobre modelo de maturidade, como deixamos nossas APIs REST com um nível de maturidade um pouco maior. E para finalizar esse curso, vamos integrar a nossa API, desenvolvida com o Python e Django REST, com uma API desenvolvida com React.

Então temos na nossa API alunos, cursos, matrículas e nessa parte de cursos eu quero conectar a minha API que está funcionando local com uma aplicação local também, desenvolvida em React. O que acontece? Quais são os passos necessários para eu conseguir ligar a minha API React com a minha API Django REST Framework?

Sabendo de tudo isso, o que teremos em mente durante esse treinamento? Vamos disponibilizar um projeto inicial e todos os passos dados serão bem guiados para vocês, para que todo mundo consiga seguir esse treinamento.

Esse projeto em React, nós vamos entregar para vocês, mas o nosso foco principal é a parte do Django REST, não vamos mexer em nenhuma linha de código do React, vamos simplesmente executar o comando, instalar o que é necessário para o React funcionar e executar o comando para subir o nosso servidor.

E vamos ver quais são as implicações, o que acontece, como eu faço um projeto em uma linguagem conversar com outro projeto, o front-end com oback-end, tudo isso nós veremos nesse curso.

Eu espero que você se sinta empolgado, eu super recomendo que você tenha visto os cursos anteriores de Django. Se você viu e se você está preparado para esse desafio, eu te convido a começar esse treinamento.

Versionamento - Carregando o projeto

Vamos iniciar então os nossos estudos de API com Django REST? Nós queremos evoluir uma API. Eu tenho uma API que está funcionando e eu quero incluir novas funcionalidades, novos recursos, remover um determinado recurso.

E o que eu preciso fazer? Primeiro lugar, precisamos de uma API. Pensando nisso, na atividade anterior temos um link para você fazer download do projeto base que vamos utilizar no decorrer de todo esse treinamento.

Eu já fiz o download desse projeto, vou renomear esse projeto para “drf-clientes”, já que vamos trabalhar com a ideia de outros clientes consumindo os recursos da nossa API, então vou deixar “drf-clientes”.

Vou abrir o VS Code como editor de código. Arrastando o projeto aqui para dentro, temos esse projeto aqui. Podemos dar uma olhada, é um projeto de escola, onde temos nos nossos modelos um aluno, um curso e fazemos as matrículas, vinculando o aluno e o curso, e indicando o período dessa matrícula.

Mas como eu carrego esse projeto aqui na minha máquina? Que ele já é um projeto que foi feito. Nós utilizamos como referência o projeto criado na primeira parte do nosso curso de Django REST Framework, então ele é um projeto referência, existem algumas mudanças e eu recomendo que você também faça o download e continue o projeto a partir desse stage que temos aqui.

Fizemos o download do projeto, primeira coisa que vamos fazer para carregar outro projeto Django é criar um ambiente virtual para ele.

Se observarmos, temos aqui à esquerda a “escola”, o “setup”, onde ficam todas as configurações desse projeto, temos o “manage.py”, temos um arquivo chamado “requirements.txt”, onde vamos listar todas as dependências e módulos necessários para esse projeto, e temos aqui um arquivo chamado “seed.py”, que eu já vou falar dele.

A primeira coisa que vamos fazer vai ser criar um ambiente virtual para esse projeto aqui. O que eu vou fazer? Vou fechar esse aqui, “seed.py”, só para ficarmos com a tela mais limpa e vou jogar nosso terminal aqui para cima.

Para criarmos um ambiente virtual, assim como vimos em todos os cursos de Django, python -m venv ./venv. Dou um “Enter” aqui, nós veremos que vai aparecer uma “venv” aqui à esquerda, uma pasta, era o que queríamos. O que eu vou fazer agora vai ser ativar essa minha venv. Para ativar, source venv/bin/activate. Dou um “Enter” e eu ativei a minha venv.

O que eu preciso fazer agora? Eu preciso pegar todas as dependências deste projeto e instalar nesse ambiente virtual que eu acabei de criar. Como eu faço isso? Para instalar as dependências, pip install.

Para eu pegar todas as dependências desse meu arquivo e conseguir instalar nesse meu ambiente virtual, o que eu vou fazer? Vou utilizar a flag -r e vou passar o nome desse arquivo aqui, requirements.txt. E quando eu dou um “Enter” ele vai pegar todas essas dependências, tudo que o meu projeto precisa para funcionar, e vai instalar nesse meu ambiente virtual.

Lembrando que estamos na fase 1 do nosso projeto, nós queremos evoluir uma API, qual API? Essa API que estamos instalando aqui e fazendo as configurações na nossa máquina.

Fiz aqui a instalação, vou atualizar o pip com o comando pip install --upgrade pip’. Se essa mensagem não apareceu para você, não se preocupe você continua no próximo passo que houver aqui.

Então já instalamos as dependências, se eu coloco aqui pip freeze, vamos poder visualizar aqui as mesmas dependências descritas no “requirements.txt”, que são as dependências que temos aqui também.

Lembra que eu mostrei para vocês que nesse app de escola eu tenho modelos que têm aluno, que têm cursos e matrículas? Eu preciso agora criar o meu banco de dados para manter esses recursos também.

Para eu gerar o script para criar no banco de dados, já sabemos, vou utilizar python manage.py makemigrations. Vou dar um “Enter” e ele vai gerar as migrações. Ele criou o script, agora eu preciso de fato pegar esses scripts e criar a minha base de dados, então eu uso python manage.py migrate, quando eu dou um “Enter” ele vai aplicar todas as migrações.

O que eu vou fazer agora? Eu vou subir o meu servidor, python manage.py runserver e vou abrir aqui uma nova aba, no “localhost:8000”, e temos alunos, cursos e matrículas. Quando eu clico em “alunos”, ele pede uma senha. Precisamos criar uma senha de super usuário para conseguir navegar na nossa API.

O que eu vou fazer? Vou parar o meu servidor, depois eu o carrego mais uma vez. E para criarmos um superusuário, nós utilizamos o comando python manage.py createsuperuser.

O nome que eu vou dar para ele é um nome super simples, para facilitar o nosso ambiente de desenvolvimento, então vou deixar só o “gui”, não vou colocar e-mail, vou colocar a senha mais simples. A senha mais simples de novo, ele falou que a senha é muito curta, você já sabe qual senha eu coloquei, eu dou aqui um y que quero confirmar e eu criei o meu super usuário.

Vou rodar mais uma vez o meu servidor, abrindo aqui o “localhost:8000/alunos/”. Deixa eu voltar aqui, vou clicar em “alunos” para eu visualizar, vou colocar o “gui”, que é o usuário que eu criei, e a senha que você já sabe qual é, e não temos nenhum aluno aqui. Podemos dar um post para criar.

Só que esse tempo de criarmos aluno, ficarmos criando cursos e matrículas na mão, vamos gastar um tempo não necessário, queremos focar em coisas novas no nosso treinamento. Então o que eu fiz?

Temos aqui um script chamado “seed.py”. Esse script vai nos gerar uma determinada quantidade de alunos e cursos, e ele não vai nos gerar uma quantidade de matrículas, por quê? Isso nós veremos no decorrer do curso e vamos criando no decorrer do nosso treinamento. Eu quero rodar esse script e gerar aqui 200 alunos e cinco cursos. Como eu faço?

Lá no meu terminal, deixa eu parar o meu terminal de novo, eu vou utilizar o comando python para rodar esse script passando o nome dele, python seed.py. Quando eu dou um “Enter” não apareceu nenhuma mensagem.

Vou rodar meu servidor de novo, abrindo a nossa lista de alunos, quando eu atualizar observe que agora eu tenho uma lista com 200 alunos. Vou scrollar tudo aqui, para vermos lá no final, 200 alunos. E se eu for em “cursos”, eu tenho todos os cursos também que eu criei, tem cinco cursos diferentes.

O que eu quero fazer agora? Temos a nossa API funcionando, eu preciso incluir novos recursos, eu preciso incluir novas funcionalidades na minha API, porém eu preciso garantir que as pessoas e sistemas que já consomem a minha API vão continuar utilizando. Eu não posso criar uma API nova e não posso colocar as mudanças que eu quero na minha API local.

No próximo vídeo vamos entender como existem formas diferentes de evoluirmos a nossa API e criar versões da nossa API, garantindo que essas novas funcionalidades funcionem para os clientes que precisem consumir nossa API e os clientes que já utilizavam as versões anteriores vão continuar utilizando a nossa API. Isso nós veremos a seguir.

Versionamento - Tipos de Versionamento

Nessa aula vamos aprender o que é versionamento de API. Para começar, vamos pensar nesse seguinte cenário, já temos a nossa API funcionando e vamos imaginar que a nossa API funciona para dois tipos de clientes diferentes, um cliente mobile e um cliente web, um sistema web.

E eu preciso atualizar a minha API incluindo novas funcionalidades ou outras informações dos recursos que disponibilizamos. Só que essas mudanças e essas novas funcionalidades nós não vamos colocar direto na API, vamos criar uma nova versão da nossa API.

Isso não significa que vai ser uma API nova, vai ser outra versão da API que já temos, para atender os clientes que precisam dessas novas funcionalidades e continuar atendendo os clientes que já utilizavam a versão anterior da nossa API.

No Django REST existem alguns tipos de versionamento que podemos escolher, dependendo da abordagem de cada cenário que nós vamos analisar aqui.

Existe um tipo de versionamento chamado AcceptHeaderVersioning, o que ele significa? Nós passamos o número da versão através do cabeçalho da requisição. Então nós vamos fazer um get de alunos, por exemplo, e eu vou passar lá a versão específica que eu quero utilizar. Esse tipo tem esse nome, AcceptHeaderVersioning.

Existe outro tipo também chamado URLPathVersioning, que nós vamos adicionar no recurso de uma variável a versão que queremos utilizar. Então teremos lá a nossa URL e vamos passar qual versão iremos utilizar, se é a versão 1 ou a versão 2 da nossa API. E lá na nossa view nós recuperamos esse valor através desse parâmetro “VERSION_PARAM”. Esse é outro tipo também.

Temos outro tipo chamado NamespaceVersioning, então a versão é fornecida através do namespace da URL. Então temos “v1/alunos/’, include(aluno.urls’,namespace=’v1’))” e ele tem aqui as URLs e todos os arquivos responsáveis por aquela versão que estamos utilizando, ou a versão 2 e todos os arquivos responsáveis pela versão 2. Esse tipo se chama NamespaceVersioning.

Existe outro também chamado HostNameVersioning, onde vamos incluir a versão da nossa API definida através do domínio, junto com o domínio do nosso host. Temos aqui “v1.exemplo.com/alunos/” ou “v2.exemplo.com/alunos/”.

E existe outro tipo também chamadoQueryParameterVersioning, o que ele significa? Significa que vamos transferir, através do parâmetro get, a versão que queremos utilizar. Então eu tenho aqui o meu host “/alunos/?version=1” ou “version=2”.

E por questão de tempo infelizmente nós não conseguimos mostrar na prática, criando vídeos, todos esses tipos de versionamentos de API, então vamos utilizar esse tipo aqui, QueryParameterVersioning.

No próximo vídeo vamos criar um cenário onde eu preciso criar uma versão 2 da minha API, atendendo todos aqueles requisitos que eu já passei. Eu quero continuar atendendo os clientes que já utilizavam a minha API, que já consumiam os recursos, só que eu preciso incluir novas funcionalidades e eu vou utilizar esse QueryParameterVersioning no próximo vídeo.

Sobre o curso API com Django 3: Versionamento, cabeçalhos e CORS

O curso API com Django 3: Versionamento, cabeçalhos e CORS possui 81 minutos de vídeos, em um total de 38 atividades. Gostou? Conheça nossos outros cursos de Python em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Python acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas