rest_api_templates.mp4
O projeto viabiliza a criação de um usuário com a integral preservação de todos os seus dados. Através de uma interface Front-end simples, minimalista e intuitiva, construída com Django Templates, são executáveis operações CRUD (Create, Read, Update, Delete).
O Back-end, elaborado em Django com Python, incorpora a REST API mediante o Django Rest Framework, e o armazenamento de dados é efetuado utilizando o PostgreSQL.
Siga estes passos para instalar e configurar o ambiente necessário para rodar o projeto em sua máquina local.
Antes de iniciar, você precisará ter instalado em sua máquina as seguintes ferramentas:
Siga as etapas a seguir para configurar o ambiente de desenvolvimento:
- Clone este repositório em sua máquina local.
git clone https://github.com/guicamargo19/fullstack_rest_api_templates.git
-
Na raiz do projeto, crie o arquivo ".env" a partir do ".env-example".
-
Execute o comando a seguir e certifique-se de que o Docker Desktop está aberto.
docker-compose up --build
- Navegue até o diretório clonado
cd fullstack_rest_api_templates
- Crie e ative o ambiente virtual,(comandos podem variar entre Windows, Linux e Mac.)
python -m venv venv
source venv/bin/activate
Após a ativação do ambiente virtual, selecione o interpretador correto para ele, digitando na barra superior de pesquisa do VSCode: >Python Select Interpreter
- Execute o seguinte comando para instalar as dependências:
pip install -r requirements.txt
Na raiz do projeto é possível encontrar o arquivo ".env_example", sendo que, a partir dele, deve-se criar o arquivo ".env" que deve ser preenchido com variáveis de ambiente com configurações necessárias para o banco de dados PostgreSQL. Certifique-se de criar este arquivo no mesmo local do exemplo.
Foram implementados testes para verificar a integridade do Model, das Views e do Serializer neste projeto. Também foi utilizado DRF (APITestCase) para simplificar e criar testes para verificar se as operações CRUD estão funcionando como esperado.
Executando os testes dentro do Docker:
docker-compose run --rm web python manage.py test
- Python - Linguagem de programação de alto nível, interpretada de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte.
- Django - Framework para desenvolvimento rápido para web, escrito em Python, que utiliza o padrão model-template-view.
- Django Rest Framework - Biblioteca que permite a construção de APIs REST utilizando a estrutura do Django.
- HTML - Linguagem de marcação utilizada na construção de páginas na Web.
- CSS - Cascading Style Sheets é um mecanismo para adicionar estilos a uma página web.
- PostgreSQL - Um sistema gerenciador de banco de dados objeto relacional, desenvolvido como projeto de código aberto.
- Docker - Conjunto de produtos de PaaS que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres.
Back-end desenvolvido em Django com Python e construção da Rest API com DRF (Django Rest Framework), que mantém os dados da Entidade Usuário. Ele provém toda a manutenção (CRUD) dessa entidade.
O modelo da entidade usuário possui quatro campos (nickname, fullname, email e age), sendo o "nickname" e "name" um campo do tipo CharField, o campo "email" do tipo EmailField e o "age" sendo um campo tipo PositiveIntegerField, sendo que os campos "nickname" e "email" não podem ser repetidos na base de dados.
Projeto está na raiz, onde se encontra-se o app api_rest, assim como a pasta api_root onde se localizam os arquivos como settings.py e wsgi.py. No App api_rest é onde estão localizados o Model, as Views utilizando CBV (Class Based Views), os Serializers e os Testes.
O Back-End é hospedado na porta 8000: http://localhost:8000/api/api_rest/
GET /api/api_rest/
Retorna uma lista de todos os usuários existentes.
HTTP 200 OK
Content-Type: application/json
[
{
"id": 1,
"nickname": "patricio",
"name": "Patricio de Souza",
"email": "patricio@gmail.com",
"age": 45
},
{
"id": 2,
"nickname": "antonio",
"name": "Antonio Carlos da Silva",
"email": "antonio@email.com",
"age": 56
}
]
POST /api/api_rest/
Cria um usuário
HTTP 201 OK
Content-Type: application/json
PATCH /api/produtos/${productID}
Atualiza o usuário solicitado
HTTP 200 OK
Content-Type: application/json
DELETE /api/api_rest/${userID}
Apaga o usuário solicitado
HTTP 204 OK
Content-Type: application/json
DETELE /api/api_rest/
Apaga todos os usuários
HTTP 204 OK
Content-Type: application/json
O Front-end do projeto foi realizado em Django Templates consumindo os dados da API através do contexto passado para as CBVs na renderização dos templates.
O Front-End é hospedado na porta 8000: http://localhost:8000/api/
O banco de dados PostgreSQL é estruturado de forma simples, composto apenas por uma tabela, a qual abriga os dados dos usuários.
Após a definição dos modelos no Django, é imperativo criar as migrações correspondentes para aplicar as alterações no banco de dados. Isso é realizado através do comando "python manage.py makemigrations".
Uma vez que as migrações tenham sido criadas, é necessário aplicá-las utilizando o comando "python manage.py migrate". Esta operação executa todas as migrações pendentes e atualiza o esquema do banco de dados de acordo com as definições do modelo.
O DB-Server é hospedado na porta padrão 5432 do PostgreSQL.
O arquivo "docker-compose.yml" é responsável por definir dois serviços distintos: 'db-server' e o 'web', cada um com suas próprias configurações e dependências.
- Utiliza-se a imagem 'postgres:latest' disponível no Docker Hub, que é uma imagem pré-configurada do PostgreSQL.
- O ambiente é configurado com os dados necessários, como o nome do banco de dados, usuário e senha, os quais foram previamente especificados no arquivo ".env".
- A seção "volumes" mapeia um diretório de dados do PostgreSQL, garantindo a persistência dos dados entre reinicializações do contêiner.
- Na seção "network", é definida a rede: 'django_network'. A rede é utilizadas para separar a comunicação entre os serviços, simplificando a interação entre os contêineres.
- Na seção entrypoint é adicionado o script de inicialização ["/code/entrypoint.sh"] com os comandos aguardando o banco de dados ser montado e migração dos models.
Guilherme Ferreira Camargo