0% acharam este documento útil (0 voto)
45 visualizações25 páginas

Oficina FastAPI

O documento apresenta uma oficina sobre FastAPI, um framework Python para construção de APIs de alto desempenho, destacando suas características, comparações com outros frameworks e requisitos. Inclui informações sobre instalação, uso de gerenciadores de pacotes, códigos de resposta HTTP e integração com bibliotecas como Pydantic e SQLAlchemy. Também fornece exemplos de código e referências para aprofundamento no tema.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
45 visualizações25 páginas

Oficina FastAPI

O documento apresenta uma oficina sobre FastAPI, um framework Python para construção de APIs de alto desempenho, destacando suas características, comparações com outros frameworks e requisitos. Inclui informações sobre instalação, uso de gerenciadores de pacotes, códigos de resposta HTTP e integração com bibliotecas como Pydantic e SQLAlchemy. Também fornece exemplos de código e referências para aprofundamento no tema.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 25

Encontros Universitários UFC 2024

Oficina FastAPI

https://bit.ly/oficinafastapi

Prof. Regis Pires Magalhães


[email protected]
FastAPI
• Framework Python para construção de APIs de
alto desempenho.
• Utiliza anotações e dicas de tipo do Python para
simplificar a validação e a documentação
automáticas.
Características
• Alto desempenho: Baseado no ASGI (Asynchronous
Server Gateway Interface) e otimizado para
concorrência.
• Fácil de usar: Baixa curva de aprendizado com dicas de
tipo e Pydantic.
• Baseado em padrões: Compatível com OpenAPI e JSON
Schema, permitindo a integração com ferramentas de
mercado.
• Código robusto: Pronto para produção, com geração
automática de documentação.
Comparação com outros frameworks
Web Python
• FastAPI vs Flask:
▫ Flask é mais genérico, enquanto FastAPI é focado
em APIs.
▫ Ambos permitem uso opcional de ORM.
• FastAPI vs Django:
▫ Django é voltado para aplicativos web completos
com GUI.
▫ FastAPI é especializado em APIs com maior
flexibilidade e desempenho.
Python - versões
• 3.10 – 04/out/2021
• 3.11 – 24/out/2022
• 3.12 – 02/out/2023
• 3.13 – 07/out/2024
Gerenciadores de pacotes Python
• pip
• conda
• poetry
• uv - https://docs.astral.sh/uv/
▫ gerenciador de pacotes extremamente rápido e
gerenciador de projetos, escrito em Rust.
▫ 10-100x mais rápido que o pip.
▫ Substitui pip, pip-tools, pipx, poetry, pyenv, twine,
virtualenv, etc.
▫ Instalação Linux / Mac:
 curl -LsSf https://astral.sh/uv/install.sh | sh
FastAPI
• Site: https://fastapi.tiangolo.com/
• Github: https://github.com/fastapi/fastapi

Requisitos:
• Starlette – framework web leve.
• Pydantic – biblioteca para validação de dados.
FastAPI
• mkdir oficina_fastapi
• cd oficina_fastapi
• uv venv --python 3.12
• source .venv/bin/activate
• uv init
• uv add fastapi[standard]
main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
return {"msg": "Olá, mundo!"}
FastAPI
• Execute assim para acesso local:
▫ fastapi dev main.py
• Abrindo a aplicação para o “mundo”:
▫ fastapi dev main.py --host 0.0.0.0
• No navegador acesse:
▫ http://127.0.0.1:8000/
▫ http://127.0.0.1:8000/items/1?q=monitor
▫ Documentação:
 http://localhost:8000/docs
 http://localhost:8000/redoc
Uvicorn
• https://www.uvicorn.org
• Servidor de aplicação ASGI (Asynchronous Server Gateway
Interface).
▫ Ao contrário do WSGI (usado por frameworks como Flask e
Django), o ASGI permite suporte a conexões assíncronas e
WebSockets, muito úteis para aplicações modernas, que
demandam comunicação em tempo real.
• Projetado para rodar aplicações Python assíncronas, especialmente
aquelas desenvolvidas com frameworks modernos como FastAPI e
Starlette.
• Leve e rápido
▫ Ideal para situações em que a performance e a capacidade de
lidar com conexões simultâneas são cruciais.
• A aplicação pode rodar assim também:
▫ uvicorn main:app –reload
▫ Utilizar o --reload durante o desenvolvimento para recarregar
automaticamente alterações no código.
HTTP - Códigos de resposta
@app.get("/")
def read_root():
return {"msg": "Hello World"}
=
@app.get("/", status_code=HTTPStatus.OK)
def read_root():
return {"msg": "Hello World"}
HTTP - Códigos de resposta
Código Categoria Descrição
HTTP
1xx Informativo Utilizado para enviar informações para o cliente de que
sua requisição foi recebida e está sendo processada.
2xx Sucesso Indica que a requisição foi bem-sucedida (por exemplo,
200 OK, 201 Created).
3xx Redirecionamento Informa que mais ações são necessárias para completar a
requisição (por exemplo, 301 Moved Permanently, 302
Found).
4xx Erro no Cliente Significa que houve um erro na requisição feita pelo
cliente (por exemplo, 400 Bad Request, 404 Not Found).
5xx Erro no Servidor Indica um erro no servidor ao processar a requisição
válida do cliente (por exemplo, 500 Internal Server Error,
503 Service Unavailable).
Códigos de resposta mais usados
Código HTTP Descrição
200 OK A solicitação foi bem-sucedida. O significado exato depende
do método HTTP utilizado na solicitação.
201 Created A solicitação foi bem-sucedida e um novo recurso foi criado
como resultado.
404 Not Found O recurso solicitado não pôde ser encontrado, sendo
frequentemente usado quando o recurso é inexistente.
422 Usado quando a requisição está bem-formada, mas não pode
Unprocessable ser seguida devido a erros semânticos. É comum em APIs ao
Entity validar dados de entrada.
500 Internal Quando ocorre um erro na nossa aplicação.
Server Error
main2.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
return {"msg": "Olá, mundo!"}

@app.get("/posts/{id}")
def read_item(id: int, titulo: str | None = None):
return {"id": id, "titulo": titulo}
Pydantic
• Biblioteca Python usada para validação de dados
e criação de modelos de dados fortemente
tipados.
• Amplamente utilizada para garantir que os
dados estejam no formato correto, validando
tipos e valores automaticamente.
• Popular em projetos como FastAPI, onde facilita
a validação e serialização de dados de entrada e
saída.
ORM
• ORM (Object Relational Mapping) é uma
camada que permite conectar a programação
orientada a objetos com bancos de dados
relacionais, abstraindo os comandos SQL
subjacentes.
SQLAlchemy
• É uma das bibliotecas ORM mais populares no ecossistema
Python.
• Permite a execução de ações em um banco de dados relacionais.
• Simplifica interações com bancos de dados relacionais.
• Suporte nativo a:
▫ Microsoft SQL Server
▫ MySQL / MariaDB
▫ Oracle
▫ PostgreSQL
▫ SQLite
• Embora seja projetado para bancos relacionais, ele pode ser
estendido para trabalhar com bancos NoSQL por meio de
adaptações e extensões como MongoAlchemy.
SQLModel
• Biblioteca que combina e simplifica recursos do Pydantic e
do SQLAlchemy para criar modelos de dados que podem ser
usados tanto para validação quanto para interagir com
bancos de dados.
• Projetada para ser intuitiva, especialmente em aplicações
implementadas com FastAPI.
• Instalação no projeto:
▫ uv add sqlmodel
.env
• Arquivo .env
DATABASE_URL="sqlite:///exemplo-orm.db"
database.py
from sqlmodel import create_engine, Session, SQLModel
from dotenv import load_dotenv
import os

# Carregar variáveis do arquivo .env


load_dotenv()

# Criar a engine de conexão com o banco de dados


engine = create_engine(os.getenv("DATABASE_URL"))

# Inicializa o banco de dados


def create_db_and_tables() -> None:
SQLModel.metadata.create_all(engine)

# Retorna uma sessão do banco de dados


def get_session() -> Session:
return Session(engine)
main3.py (1/2)
from fastapi import FastAPI, Depends
from datetime import datetime
from sqlmodel import SQLModel, Field, select, Session
from contextlib import asynccontextmanager
from database import create_db_and_tables, get_session

# Definição do modelo para Post


class Post(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
titulo: str
corpo: str
data: datetime = Field(default_factory=datetime.now)

# Configurações de inicialização
@asynccontextmanager
async def lifespan(app: FastAPI):
create_db_and_tables()
yield

app = FastAPI(lifespan=lifespan)
main3.py (2/2)
@app.get("/")
def home():
return {"msg": "Olá, mundo!"}

@app.post("/posts", response_model=Post)
def criar_post(post: Post, session: Session = Depends(get_session)) -> Post:
session.add(post)
session.commit()
session.refresh(post)
return post

@app.get("/posts", response_model=list[Post])
def listar_posts(session: Session = Depends(get_session)) -> list[Post]:
posts = session.exec(select(Post)).all()
return posts
Referências
• Repositório Git da Oficina
▫ https://bit.ly/oficinafastapi
• Curso completo de FastAPI por Eduardo Mendes
▫ https://fastapidozero.dunossauro.com/
▫ https://github.com/dunossauro/fastapi-do-zero
▫ Playlist no YouTube
• FastAPI - https://fastapi.tiangolo.com/
• Pydantic - https://pydantic.dev/
• SQLAlchemy - https://www.sqlalchemy.org/
• SQLModel - https://sqlmodel.tiangolo.com/
Obrigado!
Dúvidas, comentários, sugestões?

Regis Pires Magalhães


[email protected]
@regispires

Você também pode gostar