---
# System prepended metadata

title: 12 - Os frameworks
tags: [web, day2]

---

---
tags: web,day2
robots: noindex, nofollow
lang: pt-br
---

# 12 - Os frameworks

No Day 1 você aprender sobre `HTTP` e sobre como funcionam os clients e servers e também aprender que um `Request` é um pedido de acesso a um recurso do servidor e que sempre virá acompanhado de um método, ou verbo `GET, POST, PUT, DELETE etc..`, aprendeu também que o servidor devolve um objeto `Response` que sempre vem acompanhado de um código de estado, sendo esse código nas categorias 100, 200, 300, 400 e 500.

Agora vamos partir para os frameworks :) 

Como vimos no Day1 para criar um framework basta utilizarmos os recursos da linguagem Python aliados aos protocolo e os padrões web, especialmente HTTP e WSGI, é uma tarefa bastante divertida, criar seu próprio framework do zero te dá um poder e controle que são realmente incríveis.

Mas ao mesmo tempo criar as coisas do zero traz uma responsabilidade e trabalho imenso até que tudo fique de acordo com o esperado, e a maioria das soluções e testes que você vai precisar fazer com certeza já foram feitos por dezenas de outras pessoas e com a cultura de software open-source podemos simplesmente utilizar o que já existe, estender, contribuir e construir aplicações web baseadas em plataformas sólidas.

Vamos agora conhecer os principais frameworks web para Python.

## Tipos de frameworks

Existem vários frameworks web baseados na linguagem Python, todos focados no backend, e cada um com suas carecteristicas e limitações, os frameworks estão divididos em 2 categorias:

- Micro Frameworks
    - Pequenos frameworks que tomam poucas (ou nenhuma) decisões por vocÊ, são leves e oferecem flexibilidade para você arquitetar o software da maneira que preferir.
        - PRO: Leve, simples, flexivel, fácil de entender e debugar
        - CON: Exige que você tome decisões de arquitetura e crie soluções do zero.
- Full Stack Frameworks
    - Framework completo que toma a maior parte das decisões e pretende encapsular a soluções para a maioria dos seus problemas.
        PRO: Já possui modelos e padrões para resolver os principais problemas
        CON: Pesado, carrega mais features que as que você vai utilizar, pouco flexivel e altamente acoplado.

## Os principais frameworks do ecossistema Python

Eu já devo ter trabalhado com uns 15 frameworks em Python, para listar alguns: Zope, Plone, web.py, Pylons, Turbogears, Repoze, Pyramid, web2py, Tornado, Django, Flask, Sanic, Bottle, Chalice, Falcon, Hug, FastAPI.

Durante 4 anos atuei como uns dos core-developers e co-criador do web2py e foi durante esta prática que aprendi muito sobre web com Python.

Hoje em dia, durante a produção deste treinamento o mercado de frameworks Python se estabeleceu em 4 frameworks.

- Django
    - Framework Full Stack, focado em gestão de conteúdo (blogs, lojas, portais), bastante acoplado a bancos de dados SQL e utilizado por empresas como Instagram, Spotify, Pinterest, Disqus
- Flask
    - Micro Framework para sites e APIs, permite maior flexibilidade e não é acoplado a nenhum sistema de banco de dados sendo bastante utilizado com NOSQL e é utilizado em empresas como Uber, Netflix, Lyft, Airbnb, Patreon, Trivago.
- FastAPI
    - Micro framework com foco em APIs e micro serviços, utiliza funções assincronas e anotação de tipos e é usado por empresas como Microsoft, Soudcloud, Infinity e é um dos mais promissores frameworks para Python no momento.

Neste treinamento veremos os 3 frameworks para que você tenha conhecimento para trabalhar com as principais aplicações e concorrer a vagas em qualquer empresa web que utilize Python.

## Qual framework é o melhor?

Esta pergunta é bastante comum, e levando em consideração que nos últimos 20 anos ninguém conseguiu responder esta pergunta, podemos concluir que TODOS são melhores, cada um em seu nicho e objetivo especifico.

Ao escolher um framework não podemos analisar apenas os quesitos técnicos, precisamos colocar na equação as necessidades do negócio, o tamanho do time e o tipo de produto que iremos desenvolver.

Para 90% dos softwares web, qualquer um dos 3 frameworks será ótimo e a escolha será baseada em gosto e no conhecimento que você e seu time já possuem.

E em 10% dos casos sempre teremos aquelas soluções especificas onde um framework se sobressai.

Vamos agora explorar cada um deles para que você tenha discernimento quando precisar tomar a decisão de qual deles escolher.

Em cada um dos exemplos que vamos desenvolver eu vou focar nas principais features de cada um dos frameworks e durante o desenvolvimento vou comentar a respeito das partes ruins deles também.

Nós vamos começar com Flask que é o mais simples e o que mais se assemelha ao framework que fizemos no Day 1, depois veremos o Django que é o principal e mais utilizado hoje em dia na maior parte das empresas.

Depois vamos ter um espaço mais dedicado ao FastAPI, pois é o mais moderno e com certeza o mais promissor e que já se coloca como a melhor escolha em qualquer cenário para o futuro do Python.
