Aula Prática
📌 APIs REST e GraphQL com FastAPI: Primeiros Passos 🔥 1. Introdução ao FastAPI O FastAPI é um framework moderno para criar APIs rápidas e eficientes em Python, com suporte nativo a async/await, documentação automática e fácil integração com GraphQL. ✅ Vantagens: 🚀 Alta Performance (baseado em Starlette e Pydantic). 📜 Documentação automática com OpenAPI/Swagger. 🔧 Menos código, mais produtividade. 🔄 Suporte a REST e GraphQL de forma integrada. 🛠 2. Configuração do Ambiente 📌 Criar um ambiente virtual (opcional, mas recomendado) python -m venv venv source venv/bin/activate # Linux/macOS venv\Scripts\activate # Windows Antes de começar, vamos instalar o FastAPI e os pacotes necessários. 📌 Instale as dependências: pip install fastapi uvicorn strawberry-graphql 📌 Crie um arquivo main.py: touch main.py (no linux) type nul > main.py (no windows - via Prompt de Comando (CMD)) 🚀 Parte 1: Criando uma API REST com FastAPI 📌 3. Criando uma API REST Simples Abra o arquivo main.py e adicione o seguinte código: from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"message": "Olá, FastAPI!"} @app.get("/user/{user_id}") def read_user(user_id: int): return {"user_id": user_id, "name": f"Usuário {user_id}"} 📌 4. Executando a API Agora, execute o servidor com Uvicorn: uvicorn main:app --reload ➡ Acesse a API em http://127.0.0.1:8000➡ Documentação Swagger: http://127.0.0.1:8000/docs 🔹 Testando via navegador: Acesse http://127.0.0.1:8000/user/1 e veja a resposta: { "user_id": 1, "name": "Usuário 1" } ⚡ Parte 2: Criando uma API GraphQL com FastAPI + Strawberry 📌 5. Criando a API GraphQL Agora, vamos adicionar suporte ao GraphQL com Strawberry. 📌 Edite o main.py e adicione o seguinte código: import strawberry from strawberry.fastapi import GraphQLRouter from fastapi import FastAPI # Adicionando importação do FastAPI # Criando a instância do FastAPI app = FastAPI() # Criando um tipo GraphQL @strawberry.type class User: id: int name: str # Criando uma Query GraphQL @strawberry.type class Query: @strawberry.field def user(self, id: int) -> User: return User(id=id, name=f"Usuário {id}") # Criando o Schema GraphQL schema = strawberry.Schema(query=Query) # Adicionando o GraphQL no FastAPI graphql_app = GraphQLRouter(schema) app.include_router(graphql_app, prefix="/graphql") # Executar o app se este arquivo for o principal if __name__ == "__main__": import uvicorn uvicorn.run(app, host="127.0.0.1", port=8000) 📌 6. Testando a API GraphQL Agora, reinicie o servidor e acesse: 📌 GraphQL Playground: http://127.0.0.1:8000/graphql 🔹 Digite esta consulta no Playground: { user(id: 1) { id name } } 🔹 Resposta esperada: { "data": { "user": { "id": 1, "name": "Usuário 1" } } } 🎯 Conclusão e Comparação REST vs GraphQL Agora temos duas APIs no mesmo FastAPI: 1️⃣ API REST (/user/{id}) → Simples, estruturada em endpoints fixos.2️⃣ API GraphQL (/graphql) → Mais flexível, permite múltiplas consultas em uma única requisição. Característica REST (FastAPI) GraphQL (FastAPI + Strawberry) Estrutura Endpoints fixos Consulta flexível Requisições Multiplica chamadas Uma única chamada Documentação Swagger GraphQL Playground Suporte Universal Melhor para dados dinâmicos ✅ Use REST se sua API tiver dados simples e estrutura fixa.✅ Use GraphQL se precisar de flexibilidade e eficiência nas consultas. 🔥 Próximos Passos 💡 Sugestões para aprimorar o projeto: 🔧 Adicionar um banco de dados (SQLite, PostgreSQL). 🔐 Implementar autenticação com JWT. 📦 Criar um CRUD completo com FastAPI e GraphQL. 🚀 Agora é sua vez! Experimente criar novos endpoints e explorar mais consultas GraphQL. 😃
✅ Exemplo Completo de API REST e GraphQL com FastAPI
View more
from fastapi import HTTPException
if item_not_found:
raise HTTPException(
status_code=404,
detail="Item não encontrado"
)
@app.exception_handler(ValidationError)
async def validation_exception_handler(request, exc):
return JSONResponse(
status_code=422,
content={"detail": str(exc)}
)
from fastapi import FastAPI
app = FastAPI()
@app.get("/books/{book_id}")
def get_book(book_id: int):
return {"id": book_id, "title": "Example Book"}
@app.get("/books")
def get_books():
return {"books": [...]}
import strawberry
from fastapi import FastAPI
from strawberry.fastapi import GraphQLRouter
@strawberry.type
class Book:
id: int
title: str
@strawberry.type
class Query:
@strawberry.field
def books(self) -> list[Book]:
return [...]
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
pip install fastapi uvicorn
pip install "strawberry-graphql[fastapi]"