Introducción a Sanic
Sanic es un framework web asíncrono moderno para Python, diseñado para crear aplicaciones web de alto rendimiento. Basado en asyncio, permite manejar eficientemente miles de conexiones simultáneas gracias al soporte de la sintaxis async/await. Sanic es ideal para construir REST APIs, microservicios, aplicaciones en tiempo real y backends con alta carga de trabajo.
Características clave de Sanic
Rendimiento y arquitectura
Sanic está construido con un enfoque en la velocidad de ejecución. El framework utiliza asyncio para el procesamiento asíncrono de solicitudes, logrando un rendimiento comparable al de Node.js y Go. El soporte integrado de async/await hace que el código sea más legible y eficiente.
Funcionalidades
- Soporte completo de async/await desde el primer momento
- Enrutamiento con parámetros y middleware
- Soporte integrado para WebSocket
- Sistema de plantillas y manejo de archivos estáticos
- Soporte para CORS, cookies y sesiones
- Estructura de proyecto simple y clara
- Excelente escalabilidad para servidores de API
Instalación y configuración inicial
Instalación básica
pip install sanic
Dependencias adicionales
pip install sanic[ext] # Extensiones
pip install jinja2 aiofiles python-dotenv
Creación de la primera aplicación
from sanic import Sanic
from sanic.response import text
app = Sanic("MyApp")
@app.get("/")
async def index(request):
return text("¡Hola desde Sanic!")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
Enrutamiento y manejo de solicitudes
Rutas básicas
@app.get("/")
async def get_handler(request):
return text("Solicitud GET")
@app.post("/")
async def post_handler(request):
return text("Solicitud POST")
@app.put("/")
async def put_handler(request):
return text("Solicitud PUT")
@app.delete("/")
async def delete_handler(request):
return text("Solicitud DELETE")
Rutas asíncronas
import asyncio
@app.get("/async")
async def async_route(request):
await asyncio.sleep(1) # Simula una operación asíncrona
return text("Respuesta asíncrona")
Trabajo con parámetros y datos
Parámetros de ruta
@app.get("/user/<user_id:int>")
async def get_user(request, user_id):
return text(f"ID de usuario: {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"Búsqueda: {query}, límite: {limit}")
Manejo de JSON y formularios
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 respuesta
Diferentes formatos de respuesta
from sanic.response import text, json, html, redirect, file
@app.get("/text")
async def text_response(request):
return text("Texto simple")
@app.get("/json")
async def json_response(request):
return json({"message": "Respuesta JSON"})
@app.get("/html")
async def html_response(request):
return html("<h1>Página HTML</h1>")
También en la biblioteca
Guía completa de Armadillo para C++ con ejemplos prácticos
Envío de SMS en C# (.NET): Integración con API de servicios SMS
Valgrind para C++: guía completa con ejemplos prácticos