以开发者为中心,性能卓越的Python Web框架
项目描述
Xpresso 是一个基于 Starlette、Pydantic 和 di 构建的 ASGI Web框架,深受 FastAPI 启发。
一些突出功能包括
- 支持高性能 ASGI (在Python Web框架的上下文中)
- OpenAPI 文档生成
- 自动解析和验证请求体和参数,并提供自定义提取器的挂钩
- 完全支持 OpenAPI 参数序列化
- 高度类型化和测试的代码库,具有出色的IDE支持
- 强大的依赖注入系统,由 di 支持
需求
Python 3.7+
安装
pip install xpresso
您还需要安装一个 ASGI 服务器,例如 Uvicorn。
pip install uvicorn
示例
创建一个名为 example.py
的文件
from pydantic import BaseModel
from xpresso import App, Path, FromPath, FromQuery
class Item(BaseModel):
item_id: int
name: str
async def read_item(item_id: FromPath[int], name: FromQuery[str]) -> Item:
return Item(item_id=item_id, name=name)
app = App(
routes=[
Path(
"/items/{item_id}",
get=read_item,
)
]
)
运行应用程序
uvicorn example:app
在您的浏览器中导航到 http://127.0.0.1:8000/items/123?name=foobarbaz。您将获得以下JSON响应
{"item_id":123,"name":"foobarbaz"}
现在导航到 http://127.0.0.1:8000/docs,在交互式 Swagger UI 文档中进行探索
有关更多示例、教程和参考资料,请参阅我们的 文档。
灵感来源与其他框架的关系
Xpresso 主要受到 FastAPI 的启发。FastAPI 首先提出了几个对 Xpresso 方法至关重要的想法
- 利用 Pydantic 进行 JSON 解析、验证和模式生成。
- 利用 Starlette 进行路由和其他低级 Web 框架功能。
- 提供简单但强大的依赖注入系统。
- 使用该依赖注入系统提取请求数据、表单、查询参数等。
Xpresso 通过以下方式对这些想法进行了提炼
- 将依赖注入系统与请求/响应周期解耦,从而实现一个整体上更加灵活和强大的依赖注入系统,并作为独立的 di 库打包。
- 通过使用
Annotated
(PEP 593) 而不是默认值 (param: FromQuery[str]
而不是param: str = Query(...)
) 来将框架与 Pydantic 解耦。 - 路由器上的中间件,以便您可以使用路由感知方式使用通用的 ASGI 中间件(例如,仅在某些路径上安装性能中间件,而无需使用正则表达式匹配)。
- 支持在任意 Router 或挂载 App 上的 生命周期(在 FastAPI 和 Starlette 中这会静默失败)
- 将依赖注入到应用程序生命周期中,并支持 多个依赖作用域。
- 将框架从请求中提取参数和主体的框架正式化为 绑定器 API,以便第三方扩展可以执行框架所做的任何事情。
- 支持 自定义参数和表单序列化。
- 通过实现 Rust 中的依赖解析、并发执行依赖项和按依赖项控制同步依赖项的线程来提高性能。
当前状态
该项目正在积极开发中。它不应被视为“稳定”或准备好在生产环境中使用。然而,它适用于实验和学习!
哪些已经实现且相对稳定?
- 参数(查询、头等)和请求主体的提取和 OpenAPI 文档。
- 参数序列化。
- 路由,包括应用程序、路由器和路由。
- 依赖注入和测试实用工具(依赖项覆盖)。
大多数这些 API 将在将来保持 通常 稳定,尽管某些小方面(如参数名称)可能在某个时候发生变化。
哪些尚未实现或不稳定?
- 绑定器的低级 API(在
xpresso.binders
中的内容):这是公开的,但应被视为实验性的,并且可能会发生变化。高级 API(如FromPath[str]
和Annotated[str, PathParam(...)]
)可能会保持稳定。 - 安全依赖项和 OpenAPI 集成。这部分曾经存在,但需要进行一些工作。计划在将来进行,但我们需要考虑这些功能的范围和 API。
在GitHub上查看此版本:v0.46.0
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
xpresso-0.46.0.tar.gz (44.2 kB 查看哈希值)
构建分发
xpresso-0.46.0-py3-none-any.whl (62.8 kB 查看哈希值)
关闭
xpresso-0.46.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 04eb84086f49e8e8c8876e9c4f42e427b87497369d91afca6d464ab17b2ee91f |
|
MD5 | 536b59eeb84ebcf83a977a4f1b88baf1 |
|
BLAKE2b-256 | 9b37aa86b88be41bbf2a15264012076ab974b16390b625d8741cfcb6f1d9e306 |
关闭
xpresso-0.46.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 72034522eee732a78c4ddf67ec6c10080b499eb9e7f32dba43d5464b0a71b5d1 |
|
MD5 | 004e4da53fbdce35077baab3afd537a3 |
|
BLAKE2b-256 | 2150a4fd8df8b74590c18a1381a7774cc137a7882d70203d48ef6dc211410f9f |