الوثائقتكامل جهاز التوجيه المخصص
قم بتضمين جهاز توجيه FastAPI موجود في Nexy
لتضمين جهاز توجيه FastAPI موجود في Nexy، قم بتعيين useRouter على ذلك APIRouter في فئة NexyConfig من nexyconfig.py: يتم تقديم مساراته كما هي، بجوار ملفات src/routes/.
متى تستخدم جهاز توجيه مخصص
- الترحيل التدريجي: ينتقل تطبيق FastAPI إلى مسار Nexy عن طريق المسار، وتستمر مساراته القديمة في الرد في هذه الأثناء.
- إعادة استخدام الكود: تعرض الحزمة بالفعل
APIRouterللمصادقة أو الفوترة. - الواجهة الخلفية التي تحتفظ بها: تظل واجهة برمجة التطبيقات (API) عادية FastAPI، ويضيف Nexy الصفحات.
تعيين useRouter في nexyconfig.py
جهاز التوجيه هو أي FastAPI APIRouter، مكتوبًا بالطريقة التي تكتب بها واحدًا بالفعل:
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 هو حقل من فئة NexyConfig، مثل كل إعدادات المشروع:
from nexy.core.models import NexyConfigModel from src.legacy.api import router class NexyConfig(NexyConfigModel): useRouter = routernx dev ثم يجيب على GET /api/status و GET /api/users/{id}، ويسردهما /docs.
عدة أجهزة التوجيه
useRouter يأخذ جهاز توجيه واحد. جمع عدة تحت أحد الوالدين مع 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 = routerالصفحات وملفات المسار بجانبه
لا تزال src/routes/ قيد القراءة أثناء تعيين useRouter: صفحة .nexy أو إجابات ملف المسار .py بجوار المسارات المضمنة.
title = "Home"<h1>{{ title }}</h1>async def GET(): return {"ok": True}حدان عند ضبط useRouter:
- الصفحات غير مغلفة بـ
layout.nexy؛ useCSR = Trueمرفوض:nx devوnx buildجوابuseCSR requires file-based routing.
يتم الرد على عنوان URL مرة واحدة. امنح جهاز التوجيه المضمن بادئة، هنا /api، واحتفظ بملفات src/routes/ بعيدًا عن المسارات التي يستخدمها.
تطبيق كامل FastAPI
useRouter يأخذ تطبيق APIRouter، وليس تطبيق FastAPI. توجد مسارات التطبيق في السمة 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.routerتظل البرامج الوسيطة الخاصة بالتطبيق ومعالجات الاستثناءات وأحداث بدء التشغيل في الخلف: انقلها إلى useMiddlewares والحقول الأخرى في nexyconfig.py.
التبعيات والمصادقة وقاعدة البيانات
يعمل جهاز التوجيه في عملية Nexy، لذلك تعمل Depends وأنظمة الأمان وجلسات قاعدة البيانات كما في التطبيق الأصلي:
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}اختبره
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"}الخطوات التالية
- من FastAPI إلى Nexy: انقل المسارات إلى الملفات، واحدًا تلو الآخر
- التوجيه القائم على الملف
- التوجيه المعياري:
useRouter = AppModule