FusionFusion

Router

ثبت APIهای کلاس‌محور با @route، توکن‌های مسیر، پارامترها و متادیتای Swagger

نمای کلی

مسیریابی در Fusion Python اعلانی است. یک زیرکلاس FusionBaseApi را با @route(...) تزئین می‌کنید. هنگام import کلاس ثبت می‌شود؛ وقتی اپ mount می‌شود، هر متد HTTP (get, post, …) به یک route واقعی در هسته Rust تبدیل می‌شود.

from fusion_framework.api import FusionBaseApi
from fusion_framework.route import route
from fusion_framework import status


@route("api/[module]/{id}", tags=["items"], desc="Items by id")
class ItemModule(FusionBaseApi):
    def get(self, id: int):
        return self.response({"id": id}, status=status.HTTP_SUCCESS)

ماژول را از main.py import کنید تا قبل از listen() ثبت شود.

@route در برابر router

نمادنقش
route(path, **options)دکوراتور اصلی — مسیر + Swagger + middleware / roles
router(path)معادل route(path) بدون متادیتای اضافه

برای کد جدید از @route استفاده کنید.

قالب مسیر

سگمنت‌ها هنگام ثبت کلاس resolve می‌شوند.

توکنمعنیمثال
متن ثابتسگمنت دقیقapi/api/...
[module]نام کلاس بدون پسوند Module، حروف کوچکProductModuleproduct
{name}پارامتر دینامیک مسیر{id}id: int
@route("api/[module]/{id}")
class ProductModule(FusionBaseApi):
    def get(self, id: int):
        ...
# نتیجه: /api/product/{id}

پیشوند نسخه

با version= مسیر resolve‌شده پیشوند می‌گیرد:

@route("api/[module]/", version="v1")
class ProductModule(FusionBaseApi):
    ...
# → /v1/api/product/

گزینه‌های Swagger / OpenAPI

فقط روی مستندات اثر دارند، نه روی مسیریابی runtime:

آرگوماننوعکاربرد
tagslist[str]گروه‌بندی در Swagger
descstrتوضیحات
titlestrعنوان
versionstrپیشوند مسیر (نسخه‌بندی API)
deprecatedboolعلامت deprecated

تنظیمات سراسری UI در fusion.<env>.json است — Commands & environments.

Middleware و roles روی route

آرگومانکاربرد
middlewareلیست (request, call_next) فقط برای این route
rolesمیانبر گارد نقش (payload در request["state"]["jwt"])
@route("api/admin", roles=["admin", "super_admin"])
class AdminModule(FusionBaseApi):
    def get(self):
        user = self.state.get("jwt", {})
        return self.response({"sub": user.get("sub")})

جزئیات کامل: Middleware.

بایندینگ پارامتر

آرگومان‌های handler به‌صورت خودکار پر می‌شوند:

  1. نام با پارامتر path یکی باشد → path
  2. وگرنه اگر متد POST / PUT / PATCH باشد و نام در JSON body باشد → body
  3. وگرنه اگر در query باشد → query
  4. آرگومان‌های optional / با default اگر نباشند → None
@route("api/[module]/{id}")
class ItemModule(FusionBaseApi):
    def get(self, id: int):
        return self.response({"id": id})

    def post(self, id: int, title: str = "untitled"):
        return self.response({"id": id, "title": title}, status=status.HTTP_201_CREATED)

ویوی درخواست روی کلاس

پراپرتیمنبع
self.methodمتد HTTP
self.pathمسیر
self.bodyبدنه خام
self.headersهدرها
self.paramsپارامترهای path
self.queryquery string
self.stateدادهٔ middleware

پاسخ و خطا

return self.response({"ok": True}, status=status.HTTP_SUCCESS)

from fusion_framework.http import HTTPException
raise HTTPException(404, {"detail": "not found"})

برای async def ببینید: Async.

در این صفحه