No curso anterior, trabalhamos na construção da API de uma escola, que consistia em criar pessoas estudantes, cursos e matrículas, além de trabalhar com essas informações.
Também criamos rotas de visualização e adicionamos uma autenticação que permitisse que apenas pessoas usuárias cadastradas acessassem e trabalhassem com essa API.
Agora temos um novo quadro no Trello, para adicionarmos alguns pontos na API com foco em integridade dos dados, segurança, e também na experiência da pessoa usuária.
Configurando o projeto
O quadro segue o mesmo esquema com quatro colunas:
- Ferramentas;
- Backlog;
- Desenvolvendo;
- Finalizado.
Na coluna de ferramentas, vamos analisar no primeiro card ("API") quais informações da API precisamos adicionar.
Informações Técnicas:
- Versão mais atual do Django REST Framework
Informações Gerais da API:
- Modelos de Estudantes, Cursos e Matrículas
- Rotas de Estudantes, Cursos, Matrículas por Estudant e Matrícula por Cursos
- Conter validações para os dados
- Adicionar técnicas para lidar com conjunto de dados (Filtros, Paginação e Ordenação)
- Uma segunda versão da API deve ser adicionada
Projeto Anterior
Manteremos a versão mais atual do Django REST Framework, e além disso, modelos e rotas permanecerão os mesmos. Ou seja, todo o projeto que construímos será reaproveitado agora.
Em seguida, começam as informações que serão o foco deste momento: primeiramente, precisamos conter validações para os dados, isto é, a API precisa adicionar um sistema de validações.
Também precisamos adicionar técnicas para lidar com conjuntos de dados. São elas: filtros, paginação e ordenação. Por fim, faremos uma segunda versão da API para ser apresentada.
Clonando o projeto anterior
Agora precisamos puxar o projeto anterior e configurar o ambiente para começarmos a trabalhar.
Primeiro, vamos clicar no link do projeto anterior, disponível na descrição do card "API". Trata-se de uma página no GitHub que contém o projeto do curso anterior, onde desenvolvemos a API.
Nessa página, vamos até "Code > Clone" para copiar a informação da URL.
https://github.com/uranolais/drf-escola-curso-01.git
Com o VS Code aberto, já temos uma pasta chamada "ESCOLA", Utilizando o atalho "Ctrl + J", vamos abrir o terminal para executar o seguinte comando:
git clone https://github.com/uranolais/drf-escola-curso-01.git .
Note que adicionamos um ponto (.) ao final do comando. Ele serve para informar que queremos copiar para o diretório atual, sem inserir uma pasta adicional.
Após finalizar, teremos acesso a todas as informações do projeto anterior.
Configurando o ambiente
O próximo passo é criar o ambiente virtual. Para isso, utilizamos o comando abaixo:
Uma vez criado o ambiente, precisamos ativá-lo para começar a trabalhar. Nesse caso, executamos o seguinte comando:
venv \Scripts\activate.bat
O comando acima é utilizado para ativar o ambiente no Windows. Caso você utilize Linux ou Mac, o comando correto será source venv/bin/activate.
Instalando as dependências da API
Com o ambiente ativado, será necessário instalar as dependências da API para começarmos a trabalhar. Iniciamos com o comando pip install. Como todas as dependências estão no arquivo requirements.txt, vamos usar o comando -r para ler esse arquivo seguido de requirements.txt.
pip install -r requirements.txt
Dessa forma, é feita a instalação de todas as dependências necessárias.
Lembre-se! Utilizaremos a versão 5.0.3 do Django e a 3.12.0 do Python, uma das versões mais atuais dessa linguagem.
Verificando o projeto
Com tudo instalado, estamos prontos para verificar o projeto. Antes de subir no servidor, precisamos verificar se há alguma migração pendente.
Para isso, vamos executar o comando a seguir:
python manage.py makemigrations
Como retorno, identificamos que não há nenhuma migração (No changes detected). Porém, se utilizarmos o comando migrate, serão feitas todas as migrações pendentes.
Criando um superusuário
Nesse momento, poderíamos subir no servidor, mas como, teoricamente, criamos um projeto do zero, ou seja, não aproveitamos as informações iniciais, também não temos a informação de superusuário.
Sendo assim, como precisamos da autenticação, será necessário criar o superusuário para poder trabalhar com isso. Para criar o superusuário, usamos o seguinte comando:
python manage.py createsuperuser
Ao executar esse comando, serão solicitadas informações. Vamos preenchê-las seguindo o mesmo esquema de antes: o nome de usuário será lais; o endereço será [email protected]; e a senha será "lais".
Subindo o projeto no servidor
Finalmente, podemos subir no servidor, com o seguinte comando:
python manage.py runserver
Ao final, vamos copiar o link do retorno para acessar no navegador e começar a trabalhar.
Ao abrir a página, conseguimos utilizar as informações de usuário cadastradas para fazer login. Feito isso, teremos acesso às rotas com as quais trabalhamos anteriormente.
GET /
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"estudantes": "http://127.0.0.1:8000/estudantes/",
"cursos": "http://127.0.0.1:8000/cursos/",
"matriculas": "http://127.0.0.1:8000/matriculas/"
}
Criando novos dados
Como não salvamos nenhuma informação, precisaremos criar novos dados. Na rota de estudantes (estudantes), vamos começar criando outra pessoa estudante.
- Nome: Paula
- E-mail: [email protected]
- CPF: 01234567891
- Data de nascimento: 21/03/2024
- Celular: 8691956325
Essas são apenas sugestões de preenchimento para teste; você pode preencher conforme preferir.
Após preencher, vamos fazer o POST dessa requisição.
POST /estudantes/
HTTP 201 Created
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"id": 1,
"nome": "Paula",
"email": "[email protected]",
"cpf": "01234567891",
"data_nascimento": "2024-03-21",
"celular": "8691956325"
}
De volta à API Root, vamos acessar a rota cursos para criar um curso.
- Código: F01
- Descrição: Curso de Flask
- Nível: Básico
Com essas informações, também vamos realizar o POST.
POST /cursos/
HTTP 201 Created
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"id": 1,
"codigo": "F01",
"descricao": "Curso de Flask",
"nivel": "B"
}
Feito isso, há um detalhe na nossa API: se voltarmos na rota estudantes e copiarmos o CPF da Paula, conseguimos criar outra pessoa estudante com dados diferentes e o mesmo CPF. Por exemplo:
- Nome: Ju
- E-mail: [email protected]
- CPF: 01234567891
- Data de nascimento: 30/03/2024
- Celular: 61582516385
Ao fazer o POST, temos a seguinte resposta da requisição:
HTTP 201 Created
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"id": 2,
"nome": "Ju",
"email": "[email protected]",
"cpf": "01234567891",
"data_nascimento": "2024-03-30",
"celular": "61582516385"
}
Ele não fez nenhuma verificação, então agora o sistema tem duas pessoas estudantes com o mesmo CPF. Isso não é seguro, pois podem acontecer erros e cadastrarmos várias pessoas estudantes com o mesmo dado de CPF, ou celular, por exemplo, e essas informações não deveriam estar repetidas no banco.
Vamos acessar o endereço http://127.0.0.1:8000/estudantes/2/ para excluir a pessoa estudante de id igual a 2 e evitar problemas na API futuramente.
Conclusão
Nesse cenário, precisamos adicionar algumas validações. A partir do próximo vídeo, começaremos a trabalhar na inclusão dessas validações no nosso sistema!