Starlette:FastAPI 脚下的 Python 异步基石,1.2 万 Star 的幕后框架
Starlette:FastAPI 脚下的 Python 异步基石,1.2 万 Star 的幕后框架
Starlette 在 GitHub 上已经拿到 12,355 Star 了。
知道 FastAPI 的人很多,知道 Starlette 的人少一些。FastAPI 的请求路由、参数解析、响应构造,底层全是 Starlette 在干活。Uvicorn 和 Daphne 这两大 ASGI 服务器,也把 Starlette 应用当成一等公民来驱动。Python 异步 Web 的半壁江山,都踩着这个框架的地基。
1、Starlette 是什么
一个轻量级 ASGI 框架,同时是一套 ASGI 工具包。
框架模式:你可以像用 Flask 一样定义路由、挂载中间件、启动后台任务,快速搭出一个完整的 Web 服务。工具包模式:你可以在自己的 ASGI 应用里单独引用它的某个模块,比如只拿 PlainTextResponse 来返回纯文本,其他部分自己实现。两种用法互不冲突,同一套代码怎么切都行。

2、能力清单
功能列表不长,但都打在高频需求上:
网络层:WebSocket 原生支持、流式响应、静态文件服务。任务层:进程内后台任务、应用启动和关闭事件钩子。中间件层:CORS 跨域处理、GZip 压缩、Session 和 Cookie 管理。测试层:基于 httpx 的测试客户端,写测试不需要额外启动服务器。
工程质量上,100% 测试覆盖率加 100% 类型标注,硬依赖只有一个 anyio,运行时兼容 asyncio 和 trio 两种异步后端。
3、为什么它站住了
Python 异步这条路走了不少弯路。回调式写法体验劝退,后来 async/await 语法落地,ASGI 协议也标准化了,但协议和应用层之间一直缺一层好用的封装。Starlette 填的就是这个坑。
它把 ASGI 底层的 scope、receive、send 三个原语,封装成请求对象、响应对象和路由表,开发者不用直接跟协议打交道。模块设计又保持解耦,路由、中间件、响应器各自独立,可以单独拿出来用。
FastAPI 看中的正是这一层:它在 Starlette 上面加了 Pydantic 数据校验和 OpenAPI 文档生成,但 HTTP 请求进来后,匹配路由、解析请求体、调用中间件栈、构造响应对象,这条链路始终是 Starlette 的职责。
反过来,Starlette 设计的中间件规范和可挂载应用机制,也让 ASGI 生态里的组件可以跨框架共享。一个 Starlette 中间件,FastAPI 能用,其他兼容 ASGI 的框架也能直接拿来用。

4、上手
安装本体加一个 ASGI 服务器:
pip install starlette
pip install uvicorn
一个返回 JSON 的接口,从零到跑起来不超过十行代码:
from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
async def homepage(request):
return JSONResponse({'hello': 'world'})
routes = [Route("/", endpoint=homepage)]
app = Starlette(debug=True, routes=routes)
uvicorn main:app 启动,开发时加 --reload 自动重载。
可选依赖按场景安装:测试场景装 httpx,模板渲染装 jinja2,表单解析装 python-multipart,Session 支持装 itsdangerous,API 文档生成装 pyyaml。一步到位就 pip install starlette[full]。
5、适合谁
做高性能异步 API 的 Python 后端工程师、需要自建框架不想被全家桶束缚的团队、想啃 FastAPI 源码理解底层调用链的开发者。如果你只需要一个干净、不啰嗦的 ASGI 工具包,Starlette 基本是首选。
FastAPI 源码理解底层调用链的开发者。如果你只需要一个干净、不啰嗦的 ASGI 工具包,Starlette 基本是首选。
更多推荐


所有评论(0)