Routing¶
from future.routing import Get, Post, Put, Patch, Delete, Head, Options, RouteGroup, WebSocket
Each helper takes path, endpoint, name:
Get("/health", HealthController.ping, "health")
Post("/search", SearchController.search, "search")
endpoint is normally SomeController.action (unbound method). Future instantiates the controller per request. Routes are plain lists — no route decorators.
Path parameters¶
Get("/stocks/<str:stock_id>", StockController.get_stock, "stocks.show")
Get("/trades/user/<str:user_id>", TradeController.get_trades_by_user, "trades.by_user")
Values are kwargs on the action. Patterns: <int:name>, <str:name> / <string:name>, <uuid:name>, plus /users/:id and {id} forms.
Groups¶
from future.openapi import openapi_routes
from future.middleware import CORSMiddleware
from future.routing import RouteGroup, Get
from app.controllers.StockController import StockController
from app.controllers.TradeController import TradeController
routes = [
RouteGroup(
name="Docs",
routes=openapi_routes(uis=["swagger", "redoc", "scalar", "rapidoc"]),
),
RouteGroup(
prefix="/stocks",
name="Stocks",
routes=[
Get("/", StockController.get_stocks, "stocks"),
Get("/<str:stock_id>", StockController.get_stock, "stocks.show"),
],
),
RouteGroup(
prefix="/trades",
name="Trades",
middlewares=[CORSMiddleware],
routes=[
Get("/", TradeController.get_trades, "trades"),
Get("/<str:trade_id>", TradeController.get_trade, "trades.show"),
],
),
]
prefixconcatenates for nested groups.subdomainneeds a realAPP_DOMAIN(ignored whenAPP_DOMAIN="").- Middleware: see Middleware.
WebSockets¶
WebSocket("/ws/<int:id>", …) — see WebSockets.
List routes¶
future routes
Expects app in run.py.