Qual a diferença entre framework fullstack e microframework?

Publicado em 2016-02-12 por Vinicius Assef

Em que aspectos esse frameworks são diferentes? Como isso pode afetar a maneira de desenvolver um sistema?

Importante: o termo "fullstack", quando referindo-se a frameworks web em Python, não inclui, necessariamente, tecnologias de frontend.

Conceitos

Os frameworks fullstack vêm com todas as ferramentas (ou a maioria delas) necessárias para desenvolver o backend de uma aplicação Web, em Python:

  • Tratamento de requisição (request) HTTP;
  • Envio da resposta (response) a uma requisição HTTP;
  • Gerenciamento da sessão do usuário (session);
  • Tratamento de dados vindos de formulários (form);
  • Uma linguagem de templates para gerar o HTML da página;
  • Uma forma de acessar o Banco de Dados sem a necessidade de usar linguagem SQL;
  • Autenticação e autorização de acesso de usuários;
  • Uma forma de alimentar dados nas tabelas do Banco de Dados através de formulários gerados automaticamente;
  • Configuração de rotas (URL's) da aplicação.

Assim sendo, usando um framework fullstack, como Django ou Web2py, o desenvolvedor não precisa de nenhum pacote adicional para desenvolver o backend de uma aplicação web.

Já os microframeworks comprometem-se a não fazer muitas escolhas e permitem que a stack seja personalizada para o programador. Dois exemplos bem clássicos são:

  1. Linguagem de templates;
  2. Forma de acessar o Banco de Dados.

Esses dois componentes são muito importantes na maioria das aplicações web e pode ser necessário trocá-los, seja por preferência ou por necessidade.

Alguns microframeworks fazem algumas escolhas, como o Flask que depende do Jinja2, uma linguagem de templates. Isso significa que quando você instalar o Flask, o Jinja2 também será instalado. Falaremos mais sobre linguagens de templates em um capítulo exclusivo sobre o assunto.

Outros microframeworks, como o Bottle, não dependem de nada além da biblioteca padrão do Python.

Em geral, os microframeworks fornecem:

  • Tratamento de requisição HTTP;
  • Envio da resposta a uma requisição HTTP;
  • Gerenciamento de sessions;
  • Configuração de rotas da aplicação.

Não é melhor sobrar do que faltar?

Nossa tendência é pensar que um framework fullstack seria a escolha natural para todas as situações e muitas vezes questionamos a utilidade dos microframeworks, mais ou menos assim:

Se um framework fullstack já vem com tudo o que eu preciso, por que vou me aventurar com um microframework para escolher componentes que fazem a mesma coisa?

Nos capítulos de comparação entre frameworks vamos explorar mais as vantagens e desvantagens de cada perfil de framework. Por enquanto vamos usar um exemplo para ilustrar uma situação.

Imagine que sua aplicação desenvolvida com Web2py precisa atualizar dados em tempo real em um banco de dados Interbase. Pesquisando, você descobre que a PyDal (biblioteca para acessar o Banco de Dados que vem com o Web2py) não é compatível com ele. O que você faria?

Bem, existem algumas soluções para esse problema. Algumas delas seriam:

  1. Escrever uma aplicação auxiliar para tratar essas atualizações e integrá-la com sua aplicação principal;
  2. Encontrar uma biblioteca Python para acessar o Interbase e integrá-la à sua aplicação;
  3. Adaptar a PyDal para acessar o Interbase.

Acredito que a última alternativa não faça parte da realidade da maioria de nós, desenvolvedores. Normalmente nadamos contra a maré dos prazos apertados!

Se você optar pela primeira alternativa, terá duas aplicações escritas em dois frameworks diferentes e ainda terá que integrá-las. Ou seja, um framework fullstack não nos ajudou em nada.

Se escolher a segunda opção, não vai aproveitar em nada as vantagens do Web2py para a geração automática de formulários a partir de um modelo de banco de dados. Você vai ter que tratar os formulários na mão. Novamente, um framework fullstack não fez diferença.

Entretanto, se você usasse um microframework e escolhesse a alternativa 2, teria apenas o trabalho de acoplar a biblioteca para acessar o Interbase. E continuaria usando todo o restante que já usava, inclusive o tratamento de formulários.

Esse exemplo mostra que um microframework facilitaria bastante a tarefa, apesar de ser a escolha menos comum a princípio.

Por outro lado, se você tem a certeza que seu projeto não será impactado por mudanças tão drásticas, um framework fullstack pode, sim, ser uma boa alternativa.

Nota: o Web2py foi apenas um exemplo. Mesmo usando Django você teria as mesmas complicações ilustradas.

Conclusão

A escolha entre um framework fullstack e um microframework não é uma ciência exata, pois vai depender dos requisitos que seu projeto precisa atender.

Mas, em linhas gerais, podemos dizer que:

  1. Se você procura algo pronto para usar, opte por um framework fullstack.
  2. Caso prefira ter a liberdade de escolher e plugar componentes, os microframeworks são seu caminho natural.

Para saber mais, leia:

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.