Introdução ao Sanic
Sanic é um framework web assíncrono moderno para Python, projetado para criar aplicações web de alto desempenho. Baseado em asyncio, ele permite processar milhares de conexões simultâneas com eficiência, graças ao suporte à sintaxe async/await. Sanic é ideal para construir REST APIs, microsserviços, aplicações em tempo real e backends de alta carga.
Principais Características do Sanic
Desempenho e Arquitetura
Sanic foi construído com foco em velocidade de execução. O framework utiliza asyncio para processamento assíncrono de requisições, alcançando desempenho comparável ao Node.js e Go. O suporte nativo a async/await torna o código mais legível e eficiente.
Funcionalidades
- Suporte completo a async/await pronto para uso
- Roteamento com parâmetros e middleware
- Suporte nativo a WebSocket
- Sistema de templates e manipulação de arquivos estáticos
- Suporte a CORS, cookies e sessões
- Estrutura de projeto simples e intuitiva
- Excelente escalabilidade para servidores de API
Instalação e Configuração Inicial
Instalação Básica
pip install sanic
Dependências Adicionais
pip install sanic[ext] # Extensões
pip install jinja2 aiofiles python-dotenv
Criando a Primeira Aplicação
from sanic import Sanic
from sanic.response import text
app = Sanic("MyApp")
@app.get("/")
async def index(request):
return text("Olá do Sanic")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
Roteamento e Manipulação de Requisições
Rotas Básicas
@app.get("/")
async def get_handler(request):
return text("Requisição GET")
@app.post("/")
async def post_handler(request):
return text("Requisição POST")
@app.put("/")
async def put_handler(request):
return text("Requisição PUT")
@app.delete("/")
async def delete_handler(request):
return text("Requisição DELETE")
Rotas Assíncronas
import asyncio
@app.get("/async")
async def async_route(request):
await asyncio.sleep(1) # Simula uma operação assíncrona
return text("Resposta assíncrona")
Trabalhando com Parâmetros e Dados
Parâmetros de Rota
@app.get("/user/<user_id:int>")
async def get_user(request, user_id):
return text(f"ID do usuário: {user_id}")
@app.get("/profile/<username:str>")
async def get_profile(request, username):
return text(f"Perfil: {username}")
Parâmetros de Consulta (Query)
@app.get("/search")
async def search(request):
query = request.args.get("q", "nada")
limit = request.args.get("limit", "10")
return text(f"Busca: {query}, limite: {limit}")
Manipulação de JSON e Formulários
from sanic.response import json
@app.post("/api/data")
async def receive_data(request):
data = request.json
return json({"received": data})
@app.post("/form")
async def handle_form(request):
username = request.form.get("username")
email = request.form.get("email")
return json({"username": username, "email": email})
Tipos de Resposta
Diferentes Formatos de Resposta
from sanic.response import text, json, html, redirect, file
@app.get("/text")
async def text_response(request):
return text("Texto simples")
@app.get("/json")
async def json_response(request):
return json({"message": "Resposta JSON"})
@app.get("/html")
async def html_response(request):
return html("<h1>Página HTML</h1>")
Também na biblioteca
Envio de SMS em PHP: Bibliotecas de API para Integração
Trabalho com CSV em Kotlin: bibliotecas, parsing e gravação de dados
gRPC para Swift (iOS/macOS): bibliotecas, configuração e exemplos
Métricas Prometheus em Rust: bibliotecas prometheus e metrics-exporter-prometheus