Gerando API automaticamente com Django

Sim! o/CenárioA empresa utiliza um único banco de dados MySQL hospedado no Cloud da AWS para todos os seus clientes.

A aplicação conecta diretamente no banco de dados com o driver nativo da linguagem de programação.

Qual o problema disso?As regras de negócio do software estão todas definidas na aplicação, intrinsecamente conectadas ao emarranhado e macarrônico código-fonte em um gigantesco monolito.

Uma aplicação engessada para ser disponibilizada para outras plataformas como web, celulares ou IoT.

Neste tipo de arquitetura de software não há separação de camadas e foi sendo melhorado e substituído pelos modelos de camadas MVC, MVVM ou MTV (ou MVT) com grande ajuda do mapeamento objeto-relacional ORM.

Além desses modelos, a arquitetura de microserviços e a construção de APIs trouxe ainda mais separação.

Podendo ter equipes completamente diversas de backend e frontend no desenvolvimento do mesmo projeto.

Qual a necessidade do cliente?Antes de mais nada, a empresa necessitava de uma mudança do mindset e uma organização do método de programação adotado na sua equipe como: padrões de projetos, clean code, testes unitários e versionamento do código-fonte.

O projeto necessitava:1— estar disponível na web.

2— estar disponível para integração com aplicativos nativos para Android e iOS.

3 — ter uma API REST para integrar e ser integrada com outros serviços na nuvem.

4 — ser escalável.

Porque Python e Django?Python é uma linguagem de programação interpretada, de tipagem dinâmica (ou não) e de propósito geral, ou seja, pode-se trabalhar com ela de diversas formas como ciência de dados, raspagem de dados na web, construção de sites web, desenvolvimento de jogos, construção de APIs, aplicações desktop, scripts para gerenciamento de servidores e muitas outras formas.

A filosofia da linguagem é ser de fácil legibilidade, poderosa e rápida, fácil de aprender e código-fonte aberto.

Importe o pacote this para mais detalhes:>>> import thisDjango se descreve como:um framework web Python de alto nível que incentiva o rápido desenvolvimento e o design limpo e pragmático.

Construído por desenvolvedores experientes, ele cuida de grande parte do trabalho de desenvolvimento da web, para que você possa se concentrar em escrever seu aplicativo sem precisar reinventar a roda.

É grátis e de código aberto.

Mas porque Python e Django?Como vou demonstrar na continuidade deste artigo, o Django facilita muito o trabalho na geração dos models a partir do banco de dados já modelado, gerando as classes para cada tabela, além de gerar os forms automaticamente para todos os campos.

E para complementar a construção do projeto usamos Django REST Framework para a construção da API.

Porque substituir a linguagem de programação e o framework?A substituição da linguagem e do framework não é de um dia para outro.

Não se apaga tudo e começa escrever de novo do zero.

A estratégia da empresa precisa ser muito bem pensada a longo prazo e a decisão não pode ser com base no último framework da moda.

Django foi escolhido com responsabilidade para o desenvolvimento das APIs, dos novos projetos e na reescrita dos projetos legados.

Instalação do Django e dos pacotes dependentesFaça o download e a instalação do Python conforme sua plataforma Windows, Mac OS ou Linux/UNIX.

Utilizamos Python 3.

6.

8, Django 2.

1.

7 e Django REST Framework 3.

9.

0Inicie um ambiente virtual do Python virtualenv para encapsular e isolar o gerenciamento do projeto:Windows:virtualenv venv -p C:Python36python.

exe.

venvScriptsactivateMac/Linux:virtualenv venvsource /path/to/venv/bin/activateInstale os pacotes no ambiente virtual pelo gerenciador de pacotes PyPI.

pip3 install django djangorestframework mysqlclientVocê pode especificar a versão do pacote que deseja instalar.

Fiz isso pois foi nestas versões dos pacotes que utilizei na implementação desse projeto:pip3 install django==2.

1.

7 djangorestframework==3.

9.

0 mysqlclientCriação do projeto1 — Criar um novo projeto Django:django-admin startproject config .

python .

manage.

py startapp projeto2 — Incluir o novo app no settings.

pyINSTALLED_APPS = [ ‘django.

contrib.

admin’, ‘django.

contrib.

auth’, ‘django.

contrib.

contenttypes’, ‘django.

contrib.

sessions’, ‘django.

contrib.

messages’, ‘django.

contrib.

staticfiles’, ‘projeto’,]3 — Configurar o acesso ao banco de dados MySQL no settings.

py:DATABASES = { ‘default’: { ‘ENGINE’: ‘django.

db.

backends.

mysql’, ‘NAME’: ‘database_name’, ‘USER’: ‘root’, ‘PASSWORD’: ‘password’, ‘HOST’: ‘localhost’, ‘PORT’: ‘3306’, }}4 — Executar o inspectdb do Django:python .

manage.

py inspectdb > models.

pyO inspectdb faz a leitura dos metadados do banco de dados e cria todas as classes do model do Django automaticamente.

Mapeia todas as tabelas, colunas, tipos de dados, primary keys e foreign keys.

Substitua o arquivo models.

py criado pelo inspectdb no lugar o models.

py vazio que está no seu projeto.

5 — Registre as classes no django-adminApós criadas as classes no models.

py pelo inspectdb, registre as classes no admin.

py para que o admin do Django consiga visualizar e gerenciar as novas classes.

Uma opção é registrar classe a classe:from django.

contrib import adminfrom .

models import Classe1from .

models import Classe2.

admin.

site.

register(Classe1)admin.

site.

register(Classe2).

Como o assunto deste post é automatizar, vamos automatizar isso também =)from django.

contrib import adminfrom django.

apps import appsapp = apps.

get_app_config(‘projeto’)for model_name, model in app.

models.

items(): admin.

site.

register(model)6 — Crie o usuário admin:python .

manage.

py createsuperuser7 —Criar as migrações dos Models e aplique as alterações no banco de dados:python .

manage.

py makemigrationspython .

manage.

py migrateCriar a API com django-rest-frameworkO Django REST Framework (DRF) é um projeto para a construção de APIs, open-source e mantido pela Encode OSS e pela comunidade e financiado por diversas empresas que o utilizam.

O DRF é um projeto independente do Django.

O Django foi escrito para servir e facilitar aplicações web tradicionais por meio de templates.

Já o DRF foi desenvolvido a partir do Django mas com o propósito de construir web APIs.

Vamos automatizar a construção da API?.o/Utilizamos o projeto drf_generators com modificações para funcionar nas versões Django 2.

x e DRF 3.

9.

Este projeto gera todas as Views, Serializers e as rotas (URLs) para a API a partir do Models.

py do Django.

1 — Instalaçãopip install drf-generators2 — Incluir o rest_framework e o drf_generators no settings.

pyINSTALLED_APPS = [ ‘django.

contrib.

admin’, ‘django.

contrib.

auth’, ‘django.

contrib.

contenttypes’, ‘django.

contrib.

sessions’, ‘django.

contrib.

messages’, ‘django.

contrib.

staticfiles’, ‘projeto’, ‘rest_framework’, ‘drf_generators’,]3— Executar o comando para a criação das Views, Serializers e URLs:python .

manage.

py generate projetoMagicamente está tudo pronto!!.????.????.????Exemplo da interface do Django REST Framework para a model TransacaoOs principais verbos HTTP foram implementados (GET, POST, PUT e DELETE) para todas as classes do Models.

Mas ATENÇÃO, a intenção do projeto é iniciar o desenvolvimento da API e evitar o trabalho repetitivo na escrita de cada model, view, serializers e rotas.

Não se acomode!Outras tarefas devem ser feitas a partir de agora, como por exemplo: Autenticação OAuth, JSON Web Token (JWT), documetação da API com Swagger e construir modelos de dados sólidos e robustos.

ConclusãoA decisão da reescrita de um projeto diga-se “legado” deve ser baseado no maior número de dados possível e com muita responsabilidade e deve ser estudado caso a caso, sem fanatismo de linguagem ou framework.

Python, Django e Django REST Framework foram as melhores escolhas para o caso em questão.

.. More details

Leave a Reply