努力加载中
  • 推荐
  • 要闻
  • 财经
  • 娱乐
  • 时尚
  • 情感

热点推荐

热门图文

Litestar:拳打FastAPI,脚踢Django
匿蟒

简介

Litestar 是一个基于 Python 的现代化 ASGI Web 框架,专注于高性能和开发者体验。它采用面向对象的设计理念,将基于类的控制器作为核心架构,同时保留对函数式端点的支持。与轻量级框架不同,Litestar 内置了丰富的企业级功能,包括依赖注入系统、ORM 集成(支持 SQLAlchemy)、OpenTelemetry 观测性、缓存机制以及完善的 OpenAPI 文档支持,为构建复杂的 Web 应用提供了开箱即用的解决方案。

相比 FastAPI,Litestar 在保持高性能的同时提供了更全面的内置功能和企业级特性。其基于类的控制器设计更适合大型应用的架构组织,而完善的依赖注入系统比 FastAPI 的方案更具扩展性。Litestar 原生集成的观测性工具(OpenTelemetry)和缓存机制减少了第三方依赖,特别适合需要完整技术栈的中大型项目。虽然 FastAPI 的文档自动生成更直观,但 Litestar 在复杂业务场景下的架构优势和功能完整性使其成为更具扩展性的选择。

设计哲学

Litestar 是一个由社区驱动的项目。这意味着项目并非由单一作者主导,而是由一个核心维护团队领导,并得到众多贡献者社区的支持。目前 Litestar 拥有 5 位核心维护者,项目正处于非常活跃的开发阶段。

Litestar 的灵感来源于 NestJS —— 一个现代化的 TypeScript 框架,其核心理念强调规范化模式和设计原则。

虽然仍支持基于函数的路由端点,但 Litestar 更致力于发挥 Python 强大而灵活的面相对象编程(OOP)特性,将基于类的控制器作为框架的核心设计。

Litestar 并非一个微型框架。与 FastAPI、Starlette 或 Flask 等框架不同,Litestar 默认集成了现代 Web 应用程序所需的丰富功能,例如 ORM 集成、客户端/服务器端会话管理、缓存、OpenTelemetry 集成等。它的目标不是成为 "下一个 Django"(例如永远不会内置自己的 ORM),但它的定位也绝非微型框架。

Litestar的Philosophy原文

代码示例

以下是官方的极简示例:

from litestar import Litestar, get


@get("/")
async def hello_world() -> dict[str, str]:
    """Keeping the tradition alive with hello world."""
    return {"hello": "world"}


app = Litestar(route_handlers=[hello_world])

可以看到,和FastAPI、Flask的感觉很相似,但也略有区别。在 router 的管理上,需要更多的主动性。而且,默认没有配置 OpenAPI,需要额外设置。从Demo角度来说,这是一个劣势。但是从一个正经项目的角度来看,这些差别可以忽略,甚至,可以算作一个优势。

以下是一个基于官方样例,本人修改、整理后的单文件REST样例:

#!/usr/bin/env -S uv run

# /// script
# requires-python = ">=3.12"
# dependencies = [
#     "litestar",
#     "pydantic",
#     "uvicorn",
# ]
# ///
from dataclasses import dataclass
from uuid import UUID

from pydantic import UUID4

from litestar import Controller, Litestar, delete, get, patch, post, put
from litestar.dto import DataclassDTO, DTOConfig, DTOData
from litestar.openapi import OpenAPIConfig


@dataclass
class User:
    first_name: str
    last_name: str
    id: UUID


class PartialUserDTO(DataclassDTO[User]):
    config = DTOConfig(exclude={"id"}, partial=True)


class UserController(Controller):
    path = "/users"

    @post()
    async def create_user(self, data: User) -> User:
        ...

    @get()
    async def list_users(self) -> list[User]:
        ...

    @patch(path="/{user_id:uuid}", dto=PartialUserDTO)
    async def partial_update_user(
        self,
        user_id: UUID4,
        data: DTOData[User],
    ) -> User:
        ...

    @put(path="/{user_id:uuid}")
    async def update_user(self, user_id: UUID4, data: User) -> User:
        ...

    @get(path="/{user_id:uuid}")
    async def get_user(self, user_id: UUID4) -> User:
        ...

    @delete(path="/{user_id:uuid}")
    async def delete_user(self, user_id: UUID4) -> None:
        ...


APP = Litestar(
    route_handlers=[UserController],
    openapi_config=OpenAPIConfig(
        title="My API",
        version="0.1.0",
        # 默认是redoc,还可选swagger、elements和rapidoc。
        root_schema_site='swagger',
    ),
)

if __name__ == '__main__':
    import uvicorn

    uvicorn.run(APP, host="0.0.0.0", port=8000)

以上代码写入 main.py 文件,然后可用 uv 执行:

$ uv run main.py 
INFO:     Started server process [40799]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     127.0.0.1:54234 - "GET /schema HTTP/1.1" 200 OK

浏览器访问
http://localhost:8000/schema ,可以看到一个类似 FastAPI 的 Swagger 界面。

这个样例展示了,Litestar 完整实现一组 REST API 的大概样貌。它并不是纯粹的轻量级框架,而是具备更复杂的能力。

性能对比

在其官方网站,展示了和多个同类库的性能对比。(原文地址:Benchmarks — Litestar Framework

RPS 是 Request Per Second,越大越好,也就是下图中的条越长越好。左边是同步模式,右边是异步模式。

PRS JSON

RPS serializing Pydantic models and dataclasses into JSON

RPS files

RPS Plaintext

Litestar 并不避讳自己的缺点,在文件传输上比不过 sanic,在纯文本上比不过 starlette,但基本都优于 FastAPI。在序列化的比较上(上面第二张图),量小时,二者差不多;量大时,Litestar 所使用的标准库 dataclasses,比 Pydantic 有明显优势。而这,是更常规的场景。

上图中并无Django,因为在性能这个话题里,它还上不了桌。

三方对比

维度

Litestar

FastAPI

Django

类型

高性能 ASGI 框架,模块化设计

轻量级 ASGI API 框架

全栈 Web 框架(同步为主)

核心定位

企业级 API 和复杂应用开发

快速构建标准化 API

全功能 Web 开发(CMS、管理后台等)

异步支持

✅ 原生异步(路由、ORM 等)

✅ 原生异步(基于 Starlette)

⚠️ 有限异步支持(Django 3.0+)

内置功能

ORM 集成、缓存、会话、OpenTelemetry

依赖 Pydantic、OpenAPI 文档生成

ORM、Admin 后台、模板引擎、认证系统

依赖注入

✅ 灵活的生命周期管理

✅ 基础依赖注入(基于函数)

❌ 无原生支持

数据验证

✅ 支持 DTO 工厂 + Pydantic

✅ 深度集成 Pydantic

✅ 基于表单或 DRF 序列化器

ORM

✅ 支持 SQLAlchemy(异步)

❌ 需手动集成(如 SQLModel)

✅ 内置 Django ORM(同步)

文档生成

✅ OpenAPI 需手动配置

✅ 自动生成 Swagger/Redoc 文档

❌ 需第三方扩展(如 DRF)

性能

⚡ 高(异步优化)

⚡ 高(异步 + 类型优化)

⚠️ 中等(同步阻塞为主)

学习曲线

中等(需理解 OOP 设计)

低(直观的装饰器语法)

高(全栈功能复杂)

适用场景

中大型 API、微服务、企业级应用

轻量级 API、快速原型开发

全栈 Web 应用、CMS、管理后台

总结

Django 这个老东西,在功能完备和外围生态上,依然能打,只是性能不太行。最初是打 Flask,后来是打 FastAPI,现在要开始打 Litestar 了。

FastAPI 发展迅猛,行业认可度高,但开发社区不行。它发展了这些年,仍然还有浓厚的个人主义色彩,目前 PR 数量高达290个,处理缓慢。

Litestar 在设计理念上,拳打FastAPI,脚踢Django,大有一统江湖之势。它由开源社区驱动,未来不会有个人开发者的隐患。但目前,外围生态还不够丰富。在实际项目中,替代 FastAPI,或许可行;替代 Django,尚需时日。

本文并未展示 Litestar 在数据库管理方面的内容,也许以后会单独介绍。

Litestar

相关推荐
x