Логотип Fusion Framework от Cipher UnitFusion

Route-модули приложения

Создавайте route-модули FusionBaseApi, регистрируйте их и структурируйте обработчики

Что это

Route-модуль приложения — это класс, который расширяет FusionBaseApi и регистрируется с шаблоном пути. Convention HTTP-методы и опциональные custom HTTP routes становятся смонтированными endpoints в fusion-core.

Зачем

Группировка обработчиков на классе держит HTTP-поверхность одного ресурса цельной и позволяет [module] выводить стабильный stem пути из имени класса.

Когда

Используйте route-модуль для каждого HTTP-ресурса (или связной группы endpoints), который экспонирует ваше приложение.

Создание route-модуля (Python)

# src/modules/users/users.py
from fusion_framework.api import FusionBaseApi
from fusion_framework.route import route
from fusion_framework.http_route import http_get, http_post
from fusion_framework import status


@route(
    "api/[module]/",
    tags=["users"],
    desc="User resource",
    version="v1",
)
class UserModule(FusionBaseApi):
    def get(self):
        return self.response({"users": []}, status=status.HTTP_SUCCESS)

    @http_get("profile/[action]", title="Current profile action")
    def ProfileAction(self):
        return self.response({"profile": True}, status=status.HTTP_SUCCESS)

    @http_post("create/[action]", title="Create user")
    def CreateAction(self):
        return self.response({"created": True}, status=status.HTTP_SUCCESS)

Регистрация — через импорт из entrypoint:

# main.py
import src.modules.users.users  # noqa: F401 — runs @route

from fusion_framework.app import FusionApp
from fusion_framework.config import get_settings, load_settings_module

def main() -> None:
    load_settings_module("settings")
    FusionApp(get_settings()).listen()

if __name__ == "__main__":
    main()

Получаемые пути

HandlerMethodPath (с version="v1")
getGET/v1/api/user/
ProfileActionGET/v1/api/user/profile/profile
CreateActionPOST/v1/api/user/create/create

UserModule → [module] = user. ProfileAction → [action] = profile. CreateAction → [action] = create.

Convention vs custom routes

РежимМеханизмПример
ConventionМетоды с именами get, post, put, patch, delete, head, optionsGET /api/user/
Custom@http_get … @http_options / httpGet … httpOptions / [HttpGet] … [HttpOptions]GET /api/user/profile/profile, POST /api/user/create/create

Оба режима могут сосуществовать на одном классе. Подробности: Python Router · Custom HTTP routes.

Опции маршрута

ОпцияНазначение
tags, title, descМетаданные OpenAPI
versionПрефикс пути + запись в navbar версий Swagger
deprecatedПометить операции как deprecated
middlewareСписок route-scoped middleware
rolesДобавляет middleware require_roles(...)

Чеклист регистрации

  1. Создайте файл под src/modules/...
  2. Сделайте подкласс FusionBaseApi
  3. Примените @route / route() / [Route]
  4. Импортируйте модуль из entrypoint до listen()
  5. (C#) явно вызовите Route.Register<T>()

TypeScript / C#

Та же семантика, другой синтаксис — см. страницы роутера по языкам:

Лучшие практики

  • Один основной ресурс на класс
  • Не держите startup в файлах модулей
  • Предпочитайте [module] жёстко прошитым именам ресурсов
  • Используйте version= для ломающих изменений API

См. также

На этой странице