awesome-asgi
精选的优秀ASGI服务器、框架、应用、库和其他资源列表。
这个列表将帮助您及时了解最优秀的ASGI项目和资源。您可以关注此仓库的发布,以获得新条目的通知。如果您发现有任何遗漏,请贡献。❣️
ASGI是WSGI的精神继承者,是一个标准接口。它实现了整个Python异步Web技术栈的通信和互操作性:服务器、应用程序、中间件和各个组件。
ASGI诞生于2016年,最初是为Django Channels项目提供支持。此后,ASGI及其生态系统一直在不断扩展,尤其是在2018年Starlette和Uvicorn等项目的出现后得到了进一步的推动。
目录
应用框架
用于构建ASGI Web应用程序的框架。
- Asgineer - 一个非常轻量级的ASGI Web框架,支持长轮询、SSE和WebSocket。
- BlackSheep - BlackSheep是一个异步Web框架,用于使用Python构建基于事件的Web应用程序。它的灵感来自Flask、ASP.NET Core和Yury Selivanov的工作。
- Channels - Django的异步支持,也是ASGI项目最初的推动力。支持HTTP和WebSocket与Django集成,以及使用ASGI原生代码支持任何协议。
- Django - 追求完美主义者的Web框架。自3.0版本起原生支持ASGI。
- Falcon - 专注于可靠性、正确性和大规模性能的Python极简REST和应用后端框架。自3.0版本起原生支持ASGI。
- FastAPI - 一个现代、高性能的Web框架,用于基于Python 3.6+标准类型提示构建API。由Starlette和Pydantic提供支持。支持HTTP和WebSocket。
- Guillotina - 全功能ASGI兼容REST应用框架,专为高性能和水平扩展解决方案而设计。
- Litestar - 一个高性能的ASGI框架,提供基于msgspec的消息解析、依赖注入、身份验证、OpenAPI文档等功能。支持HTTP和WebSocket。支持asyncio和trio。
- Pyotr - 一个服务器框架,也是一个客户端库,用于提供和消费基于OpenAPI的Web服务。基于Starlette和HTTPX。
- Quart - 一个Python ASGI Web微框架,其API是Flask API的超集。支持HTTP(包括SSE和HTTP/2服务器推送)和WebSocket。
- Responder - 一个由Starlette驱动的Python熟悉的HTTP服务框架。
- Sanic - Sanic是一个为速度而生的Python 3.6+ Web服务器和Web框架。它允许使用Python 3.5中添加的async/await语法,使您的代码非阻塞且高速。支持HTTP和WebSocket。
- Starlette - 闪耀的小型ASGI框架。Starlette也是一个ASGI工具包 -- 其模块化设计和可重用组件使其成为ASGI生态系统的基础。支持HTTP和WebSocket。支持asyncio和trio。
- Tonberry - Tonberry是一个采用基于类的路由方法的ASGI框架。受CherryPy影响,但与asyncio和WebSocket兼容。
身份认证
用于在ASGI Web应用程序中添加身份认证和管理用户的包。
- asgi-auth-github - ASGI应用的GitHub OAuth身份认证。支持限制特定用户或特定团队或组织的成员。
- SessionAuth - 使用会话和cookie进行身份认证。(随Piccolo API一起提供,需要Piccolo ORM。)
- TokenAuth - 使用请求头中的令牌进行身份认证。(随Piccolo API一起提供,需要Piccolo ORM。)
终端用户应用
运行在ASGI上的真实世界应用。
- ASGIWebDAV - 一个异步WebDAV服务器实现。支持多提供商、多账户和权限控制。
- Datasette - 一个用于探索和发布数据的工具,包括ASGI兼容组件和插件。
GraphQL
用于通过ASGI构建GraphQL API的包。
- Ariadne - 一个以模式优先的Python库,用于实现GraphQL服务器。
- Strawberry - 一个受数据类启发的、以代码优先的Python库,用于实现GraphQL服务器。
- tartiflette-asgi - 为Tartiflette GraphQL引擎提供ASGI支持。
监控
用于监控ASGI Web应用程序的包。
- asgi-correlation-id - 请求/相关ID日志中间件
- New Relic ASGI - 为ASGI应用程序提供的New Relic集成。(随
newrelic
一起提供。) - opentelemetry-python - ASGI中间件和辅助工具,用于通过(目前处于alpha阶段的)OpenTelemetry标准收集应用程序指标。支持HTTP和WebSocket。
- Scout APM Starlette - Scout APM与Starlette及基于Starlette的框架的集成。(随
scout-apm
一起提供。) - Sentry ASGI - 为ASGI框架提供的Sentry集成。(随
sentry-sdk
一起提供。) - timing-asgi - ASGI中间件,用于记录和发布计时指标。
代理
在代理后运行ASGI Web应用程序时使用的包,或通过ASGI应用程序代理其他服务器的包。
- asgi-proxy-lib - 一个ASGI函数,用于通过HTTP代理到后端。
- asgiproxy - 用于构建ASGI的HTTP和Websocket代理的工具。
- ProxyHeadersMiddleware - 使用已知和受信任的代理设置的
X-Forwarded-Proto
和X-Forwarded-For
头,使client
和scheme
引用连接的客户端(随Uvicorn一起提供)。
实时Web
构建具有实时功能的ASGI Web应用程序时使用的包。
- python-socketio - 使用Socket.IO的WebSocket客户端和服务器。包括ASGI应用程序包装器。
资源
关于ASGI本身的内容:概念、历史、用法等。
出版物
关于ASGI的文章、博客文章和其他出版物。
- 2019-08-11 - ASGI简介:异步Python Web生态系统的崛起 - Florimond Manca。
- 2019-03-20 - ASGI 3.0,Andrew Godwin。
- 2018-06-17 - 拥抱ASGI与Quart;介绍Hypercorn,Philip Jones。
- 未注明日期 - Hello ASGI,Tom Christie。
参考
ASGI的参考文档和实现。
演讲
关于ASGI的演讲。
- 2023-06-05 - 深入了解你的Web框架:ASGI规范、中间件和应用程序简介,Adrian Garcia Badaracco,PyConUS 2023。
- 2019-06-15 - ASGI(异步服务器网关接口)简介,P G Jones,PyLondinium 2019。
- 2019-04-12 - 勾勒Django重新设计,Tom Christie,DjangoCon Europe。
- 2018-07-27 - Quart;Flask的ASGI替代方案,P G Jones,EuroPython 2018。
- 2018-05 - 让Django异步化,Andrew Godwin,PyCon。
- 2017-11 - 未来的Python化Web:ASGI & Daphne,Dmitry Nazarov,PiterPy。
实验和示例
实验ASGI或提供"无意维护"代码的软件。
- asgi-background - 适用于任何ASGI框架的后台任务。
- asgi-lifespan-middleware - ASGI中间件,使用简单的异步上下文管理器接口支持ASGI生命周期。
- asgi-routing - 为ASGI生态系统编写的高性能路由器,基于
routrie
和path-tree
构建。 - nanoasgi - 一个微小的零依赖ASGI Web框架。
- proxyx - 使用ASGI和HTTPX构建的轻量级HTTP/1.1代理服务的概念验证。
- py-frameworks-bench - (主要是ASGI)Python异步框架的基准测试。
教程
关于使用ASGI应用程序和组件的教程。
- 2019年8月26日 - 使用Starlette快速构建简易模拟服务,作者:Matt Layman。
- 2018年10月15日 - 使用ASGI和HTTP,作者:Tom Christie。
- 2018年6月22日 - 编写ASGI Web框架,作者:Yoong Kang Lim。
安全
用于管理ASGI Web应用程序安全性的包和组件。
- asgi-csrf - 用于防御CSRF攻击的ASGI中间件。
- asgi-ratelimit - 一个可自定义的ASGI限速中间件,支持正则表达式路径匹配。
- CORSMiddleware - 允许浏览器发起跨源请求。(随Starlette一起提供。)
- CSPMiddleware - 告知浏览器只运行来自同源的Javascript。(随Piccolo API一起提供。)
- CSRFMiddleware - 在使用cookie进行身份验证时防御CSRF攻击。(随Piccolo API一起提供。)
- HTTPSRedirectMiddleware - 将HTTP/WS流量重定向到HTTPS/WSS。(随Starlette一起提供。)
- RateLimitingMiddleware - 保护敏感端点免受暴力攻击。(随Piccolo API一起提供。)
- TrustedHostMiddleware - 通过验证请求的
Host
头来防御主机头攻击。(随Starlette一起提供。)
序列化
用于转换ASGI Web应用程序中数据格式的包和组件。
- brotli-asgi - 使用Brotli进行响应内容压缩。
- GZipMiddleware - 使用GZip进行响应内容压缩。(随Starlette一起提供。)
- msgpack-asgi - 为ASGI应用和框架提供即插即用的MessagePack支持。
无服务器
用于构建基于ASGI的无服务器Web应用程序的包。
- Mangum - 为ASGI提供AWS Lambda和API Gateway支持。
服务器
用于ASGI应用程序的Web服务器。
- Daphne - 为ASGI开发的HTTP、HTTP2和WebSocket协议服务器,用于支持Django Channels。
- Hypercorn - 基于sans-io hyper、h11、h2和wsproto库的ASGI服务器。支持HTTP/1、HTTP/2、WebSockets、ASGI 2.0和ASGI 3.0。兼容asyncio、uvloop和trio工作类型。
- NGINX Unit - 支持ASGI的通用Web应用服务器。
- Uvicorn - 基于uvloop和httptools的快速ASGI服务器。支持HTTP/1和WebSockets。
测试
用于测试ASGI应用程序的包。
- asgi-lifespan - ASGI应用程序的编程启动/关闭。允许在不启动服务器的情况下测试ASGI应用程序。
- async-asgi-testclient - 一个与框架无关的库,用于测试ASGI Web应用程序。
- HTTPX - 下一代HTTP客户端,包括异步支持和直接调用ASGI应用程序的能力。