DocsIntegración de enrutador personalizado
Incluir un enrutador FastAPI existente en Nexy
Para incluir un enrutador FastAPI existente en Nexy, configure useRouter en ese APIRouter en la clase NexyConfig de nexyconfig.py: sus rutas se sirven tal como están, junto a los archivos de src/routes/.
Cuándo usar un enrutador personalizado
- Migración gradual: una aplicación FastAPI se mueve a Nexy ruta por ruta, y sus rutas antiguas siguen respondiendo mientras tanto.
- Reutilización de código: un paquete ya expone un
APIRouter, para autenticación o facturación. - Un backend que conservas: la API permanece simple FastAPI y Nexy agrega las páginas.
Establecer useRouter en nexyconfig.py
El enrutador es cualquier FastAPI APIRouter, escrito de la forma en que ya escribe uno:
from fastapi import APIRouter router = APIRouter(prefix="/api") @router.get("/status")async def status(): return {"status": "ok"} @router.get("/users/{id}")async def user(id: int): return {"id": id}useRouter es un campo de la clase NexyConfig, como cada configuración del proyecto:
from nexy.core.models import NexyConfigModel from src.legacy.api import router class NexyConfig(NexyConfigModel): useRouter = routernx dev luego responde a GET /api/status y GET /api/users/{id}, y /docs los enumera.
Varios enrutadores
useRouter toma un enrutador. Reúna varios bajo un solo padre con include_router:
from fastapi import APIRouter from .api import router as apifrom .auth import router as auth router = APIRouter()router.include_router(api)router.include_router(auth, prefix="/auth")from fastapi import APIRouter router = APIRouter() @router.post("/login")async def login(): return {"token": "demo"}from nexy.core.models import NexyConfigModel from src.legacy import router class NexyConfig(NexyConfigModel): useRouter = routerPáginas y archivos de ruta al lado
src/routes/ todavía se lee mientras useRouter está configurado: una página .nexy o un archivo de ruta .py responde junto a las rutas incluidas.
title = "Home"<h1>{{ title }}</h1>async def GET(): return {"ok": True}Dos límites mientras se establece useRouter:
- las páginas no están envueltas por
layout.nexy; useCSR = Truees rechazado:nx devynx buildresponden auseCSR requires file-based routing.
Una URL se responde una vez. Asigne un prefijo al enrutador incluido, aquí /api, y mantenga los archivos de src/routes/ fuera de las rutas que utiliza.
Toda una aplicación FastAPI
useRouter toma una aplicación APIRouter, no una FastAPI. Las rutas de una aplicación se ubican en su atributo router:
from fastapi import FastAPI service = FastAPI(title="Billing") @service.get("/billing/invoices")async def invoices(): return []from nexy.core.models import NexyConfigModel from src.legacy.service import service class NexyConfig(NexyConfigModel): useRouter = service.routerEl middleware, los controladores de excepciones y los eventos de inicio propios de la aplicación se quedan atrás: muévalos a useMiddlewares y a los demás campos de nexyconfig.py.
Dependencias, autenticación y base de datos.
El enrutador se ejecuta en el proceso Nexy, por lo que Depends, los esquemas de seguridad y las sesiones de la base de datos funcionan como en la aplicación original:
from fastapi import APIRouter, Depends, Header, HTTPException def require_token(x_token: str = Header("")) -> None: if x_token != "secret": raise HTTPException(status_code=401, detail="Bad token") router = APIRouter(prefix="/secure", dependencies=[Depends(require_token)]) @router.get("/data")async def data(): return {"data": 42}Pruébalo
from fastapi.testclient import TestClient from nexy.app import app def test_the_included_route_answers(): assert TestClient(app).get("/api/status").json() == {"status": "ok"}Próximos pasos
- De FastAPI a Nexy: mueve las rutas a archivos, una por una
- Enrutamiento basado en archivos
- Enrutamiento modular:
useRouter = AppModule