Criando uma Aplicação REST Utilizando Flask e SQLAlchemy

Flask é um micro web framework escrito em Python. É considerado um microframework por não necessitar de bibliotecas ou ferramentas adicionais. Não possui nenhuma camada de abstração para banco de dados, validação de formulário ou qualquer outro tipo de componente. Ao invés disso, ele suporta diversas extensões. Empresas como LinkedIn e Nextel são exemplos das quais utilizam Flask.

O SQLALchemy será o nosso ORM (Object Relational Mapper). Ele provê para os desenvolvedores de software poder, flexibilidade e facilidade para lidar com instruções SQL. Como dito anteriormente, o Flask permite a componentização dos elementos, inclusive para o SQLAlchemy e,  no nosso caso em particular, utilizaremos um componente chamado Flask-SQLAlchemy, que é um extensão do Flask que suporta o SQLAlchemy.

Pois bem, o artigo será dividido em três partes:

  • Introdução ao Flask: criando a sua primeira aplicação REST;
  • Pensando no futuro: construindo uma aplicação robusta para diversos tipos de ambiente (desenvolvimento, produção e homologação);
  • Iniciando na persistência de dados para o modelo relacional com SQLAlchemy.

 

Introdução ao Flask: criando a sua primeira aplicação REST

Antes de começar, será necessário configurar o ambiente, entretanto, não irei entrar a fundo nesse tema por alguns motivos:

  • Existem diversos artigos a respeito — considere também as páginas do StackOverflow;
  • Diversidade de ambientes de desenvolvimento: já utilizei Flask no Linux, Windows e macOS, cada qual com as suas especificidades de configuração.
  • Pode-se tornar muito longo, não sobrando tempo para o mais importante: nossa aplicação em Flask;

Portanto, configure a sua máquina de modo que ela atenda aos seguintes requisitos:

  • Python 3 devidamente instalado;
  • Ambiente isolado com o virtualenv, nome: flask-ms-eumaismais;
  • Um diretório do projeto com o nome: flask-ms-eumaismais;
  • Algum editor de texto ou IDE da sua preferência — nesse tutorial foi utilizado Sublime com o pacote Anaconda;
  • cURL instalado.

Dica: você irá encontrar quase tudo que precisa aqui.

Configurando o Ambiente

Com o ambiente configurado, digite no seu terminal o seguinte comando:

Você deverá ter uma mensagem semelhante a esta, indicando o Flask foi devidamente instalado:

Por curiosidade, digite pip freeze no seu terminal. Se tudo ocorreu bem, sua saída será algo semelhante a:

Legal! Também iremos utilizar uma extensão chamada Flask-RESTful. Para instalar, digite  pip install Flask-RESTful no terminal.

Digite novamente pip freeze e confirme se instalação foi realizada:

Agora vamos criar um diretório chamado app, e dentro dele vamos criar um arquivo chamado create_app.py. A árvore do diretório deve ficar exatamente como mostra a Figura 1:

Figura 1: estrutura do diretório do projeto Flask.

No seu terminal, defina a variável de ambiente FLASK_APP como  app/create_app.py. A forma de como definir uma variável de ambiente muda de acordo com o sistema operacional — no caso do macOS: export FLASK_APP=app/create_app.py (mesmo comando no Linux). Com isso, o Flask irá ler as configurações deste arquivo no ato da criação da aplicação.
 

Criando os Primeiros Endpoints

Replique o código abaixo em create_app.py:

Explico: nas linhas 1 e 2, estamos importando as bibliotecas que vamos precisar para construir a nossa aplicação:

Das linhas 5 a 11, estamos criando o nosso primeiro endpoint:

Temos uma classe chamada MSEuMaisMais, herda da classe  Resource, aquela que nós importamos da biblioteca flask_restful, na segunda linha. Sendo filha de  Resource, nossa classe possibilita uma coisa muito importante: criar métodos HTTP.

Nesse caso, estamos criando apenas métodos que representam um POST e um GET, mas poderíamos facilmente ter métodos PUT e DELETE também, lembrando que os métodos da nossa classe sempre devem estar de acordo com os métodos HTTP — nós não podemos criar um método chamado “post_this_things” e esperar que algum tipo de mágica aconteça.

No método GET, estamos retornando um dicionário, com a chave “eu” e valor “mais mais”. E nos POST retornando um código 200, que significa que a transação do lado do server ocorreu tudo conforme o esperado.

Da linha 14 a 17, estamos criando um endpoint para o index da API.

Na linha 20, declaramos o método create_app, que será executado sempre que digitarmos flask run no terminal.

Na linha 21 estamos criando uma aplicação Flask (sim, é simples).

Na linha 22, estamos “encapsulando” a nossa aplicação para a classe API da biblioteca flask_restful, criando um novo objeto chamado api (é aqui que a aplicação ganha “poderes especiais”, permitindo, por exemplo, que as classes que citamos acima funcionem conforme o esperado).

E então, adicionamos as nossas duas classes que criamos anteriormente aos resources do nosso objeto api, definindo os endpoints para cada classe e, por fim, retornamos a nossa aplicação.

 

Testando

Agora a parte mais legal: vamos subir a aplicação e testa-la! No seu terminal, dentro do diretório do projeto e do virtualenv da aplicação, digite:

Você terá uma mensagem semelhante a Figura 2, indicando que a aplicação subiu com sucesso:

Figura 2: saída da aplicação Flask.

Agora, em outro terminal, digite os seguintes comandos e veja seus resultados:

 

Considerações Finais

Espero ter contribuído de forma positiva com o seu conhecimento. O código desse artigo está disponível no GitHub.

Até mais!

Referências:

Sobre o Autor

Desenvolvedor Python na Nextel. Formado em Análise e Desenvolvimento de Sistemas pelo IFSP e cursando MBA - Tecnologia de Software pela USP.

  • Yuri Araujo

    O Flask-RESTful suporta filtros de URL?