DokumentasiIntegrasi router khusus
Sertakan router FastAPI yang ada di Nexy
Untuk menyertakan router FastAPI yang ada di Nexy, setel useRouter ke APIRouter tersebut di kelas NexyConfig dari nexyconfig.py: rutenya disajikan apa adanya, di sebelah file src/routes/.
Kapan menggunakan router khusus
- Migrasi bertahap: aplikasi FastAPI berpindah ke rute Nexy berdasarkan rute, dan sementara itu rute lamanya tetap menjawab.
- Penggunaan kembali kode: sebuah paket sudah mengekspos
APIRouter, untuk otentikasi atau penagihan. - Backend yang Anda simpan: API tetap biasa FastAPI, dan Nexy menambahkan halamannya.
Atur useRouter di nexyconfig.py
Routernya adalah FastAPI APIRouter apa saja, ditulis seperti yang sudah Anda tulis:
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 adalah bidang kelas NexyConfig, seperti setiap pengaturan proyek:
from nexy.core.models import NexyConfigModel from src.legacy.api import router class NexyConfig(NexyConfigModel): useRouter = routernx dev lalu menjawab GET /api/status dan GET /api/users/{id}, dan /docs mencantumkannya.
Beberapa router
useRouter membutuhkan satu router. Kumpulkan beberapa di bawah satu orang tua dengan 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 = routerHalaman dan rutekan file di sebelahnya
src/routes/ masih dibaca ketika useRouter disetel: halaman .nexy atau jawaban file rute .py di sebelah rute yang disertakan.
title = "Home"<h1>{{ title }}</h1>async def GET(): return {"ok": True}Dua batasan saat useRouter disetel:
- halaman tidak dibungkus oleh
layout.nexy; useCSR = Trueditolak:nx devdannx buildjawabanuseCSR requires file-based routing.
URL dijawab satu kali. Berikan awalan pada router yang disertakan, di sini /api, dan jauhkan file src/routes/ dari jalur yang digunakannya.
Seluruh aplikasi FastAPI
useRouter membutuhkan aplikasi APIRouter, bukan FastAPI. Rute aplikasi berada pada atribut 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.routerMiddleware, pengendali pengecualian, dan peristiwa startup milik aplikasi tetap berada di belakang: pindahkan ke useMiddlewares dan bidang lain di nexyconfig.py.
Dependensi, autentikasi, dan database
Router berjalan dalam proses Nexy, jadi Depends, skema keamanan dan sesi database berfungsi seperti pada aplikasi asli:
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}Ujilah
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"}Langkah selanjutnya
- Dari FastAPI ke Nexy: pindahkan rute ke file, satu per satu
- Perutean berbasis file
- Perutean modular:
useRouter = AppModule