内容提要
Vercel 现支持用 Python 为 FastAPI、Flask、Django 等框架编写路由中间件,在请求到达应用前运行,可重写、重定向或直接响应请求。中间件需在 vercel.toml 中配置 proxy 入口,作为独立 ASGI/WSGI 应用运行,依赖放入 pyproject.toml 的 vercel.proxy 组。vercel-proxy 包提供 Proxy 等工具,支持按路径路由;未匹配任何路由的请求将原样转发给应用。
延伸解读
中间件独立运行,依赖需单独管理
Python 路由中间件作为独立的 ASGI 或 WSGI 应用运行,与主应用隔离。这意味着中间件只能使用 pyproject.toml 中 vercel.proxy 依赖组里声明的包,不会自动继承主应用的依赖。开发者需要显式将中间件所需的包加入该组,避免运行时因缺少依赖而失败。这种设计虽然增加了配置步骤,但能确保中间件环境干净、可控。
按路径路由,未匹配请求原样转发
借助 vercel-proxy 包提供的 Proxy 应用,可以按路径模式匹配请求,并执行重写、重定向或直接响应。例如,将旧博客路径重定向到新路径,或为 API 请求添加版本头。对于未匹配任何路由的请求,中间件会将其原样转发给主应用,不会干扰现有逻辑。这种机制让中间件可以逐步引入,只处理需要拦截的特定路径。
配置入口点,明确中间件职责
在 vercel.toml 中通过 [proxy] 段的 entrypoint 指定中间件入口,例如 proxy:proxy。这要求开发者明确中间件代码的位置和入口对象。中间件在请求到达应用前运行,适合处理跨应用的通用逻辑,如路径重定向、请求头修改或简单响应。但需注意,中间件不应承担主应用的业务逻辑,保持职责单一有助于维护。
Q&A
如何在 Vercel 上用 Python 编写路由中间件?
在 vercel.toml 中配置 proxy 入口点,例如 entrypoint = "proxy:proxy",然后编写一个 ASGI 或 WSGI 应用作为中间件,该应用独立于主应用运行,仅使用 pyproject.toml 中 vercel.proxy 依赖组里的包。
Python 路由中间件支持哪些框架?
支持 FastAPI、Flask、Django 以及其他 Python 框架。
路由中间件在请求处理流程中起什么作用?
它在请求到达应用之前运行,可以重写请求、重定向请求或直接响应请求。
如何为中间件添加依赖包?
使用命令 uv add --group vercel.proxy vercel-proxy 将包添加到 pyproject.toml 的 vercel.proxy 依赖组中。
vercel-proxy 包提供了哪些工具?
vercel-proxy 包提供了用于编写路由中间件的工具,包括 Proxy 应用,可按路径路由请求,以及 ContinueResponse、RedirectResponse、Request、Response 等类。
如果请求没有匹配任何路由,会发生什么?
未匹配任何路由的请求将原样转发给应用,不做任何修改。