Show HN: FastOpenAPI – automated docs for many Python frameworks
FastOpenAPI是一个Python库,使用Pydantic v2为Falcon、Flask、Sanic、Starlette、Tornado等多种框架自动生成和集成OpenAPI文档。它借鉴了FastAPI的设计理念,提供类似开发者友好的体验。用户可以通过pip安装,并提供快速开始的示例代码。FastOpenAPI支持数据验证,提供Swagger UI和ReDoc UI访问文档。项目包含高级示例、性能测试和开发建议,并欢迎贡献。
Show HN: FastOpenAPI - 为多种 Python 框架自动生成文档
FastOpenAPI 是一个使用 Pydantic v2 和各种框架(Falcon, Flask, Sanic, Starlette, Tornado)生成和集成 OpenAPI schemas 的库。
License
FastOpenAPI 是一个用于使用 Pydantic 和各种框架生成和集成 OpenAPI schemas 的库。 该项目受到了 FastAPI 的启发,旨在提供类似开发者友好的体验。
📦 安装
仅安装 FastOpenAPI:
pip install fastopenapi
安装 FastOpenAPI 并指定框架:
pip install fastopenapi[falcon]
pip install fastopenapi[flask]
pip install fastopenapi[sanic]
pip install fastopenapi[starlette]
pip install fastopenapi[tornado]
🛠️ 快速开始
第一步: 创建应用
- 创建
main.py
文件 - 从示例中复制代码
- 有些示例需要 uvicorn (
pip install uvicorn
)
示例:
-
import falcon.asgi import uvicorn from pydantic import BaseModel from fastopenapi.routers import FalconRouter app = falcon.asgi.App() router = FalconRouter(app=app) class HelloResponse(BaseModel): message: str @router.get("/hello", tags=["Hello"], status_code=200, response_model=HelloResponse) async def hello(name: str): """Say hello from Falcon""" return HelloResponse(message=f"Hello, {name}! It's Falcon!") if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=8000)
-
from flask import Flask from pydantic import BaseModel from fastopenapi.routers import FlaskRouter app = Flask(__name__) router = FlaskRouter(app=app) class HelloResponse(BaseModel): message: str @router.get("/hello", tags=["Hello"], status_code=200, response_model=HelloResponse) def hello(name: str): """Say hello from Flask""" return HelloResponse(message=f"Hello, {name}! It's Flask!") if __name__ == "__main__": app.run(port=8000)
-
from pydantic import BaseModel from quart import Quart from fastopenapi.routers import QuartRouter app = Quart(__name__) router = QuartRouter(app=app) class HelloResponse(BaseModel): message: str @router.get("/hello", tags=["Hello"], status_code=200, response_model=HelloResponse) async def hello(name: str): """Say hello from Quart""" return HelloResponse(message=f"Hello, {name}! It's Quart!") if __name__ == "__main__": app.run(port=8000)
-
from pydantic import BaseModel from sanic import Sanic from fastopenapi.routers import SanicRouter app = Sanic("MySanicApp") router = SanicRouter(app=app) class HelloResponse(BaseModel): message: str @router.get("/hello", tags=["Hello"], status_code=200, response_model=HelloResponse) async def hello(name: str): """Say hello from Sanic""" return HelloResponse(message=f"Hello, {name}! It's Sanic!") if __name__ == "__main__": app.run(host="0.0.0.0", port=8000)
-
import uvicorn from pydantic import BaseModel from starlette.applications import Starlette from fastopenapi.routers import StarletteRouter app = Starlette() router = StarletteRouter(app=app) class HelloResponse(BaseModel): message: str @router.get("/hello", tags=["Hello"], status_code=200, response_model=HelloResponse) async def hello(name: str): """Say hello from Starlette""" return HelloResponse(message=f"Hello, {name}! It's Starlette!") if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=8000)
-
import asyncio from pydantic import BaseModel from tornado.web import Application from fastopenapi.routers.tornado import TornadoRouter app = Application() router = TornadoRouter(app=app) class HelloResponse(BaseModel): message: str @router.get("/hello", tags=["Hello"], status_code=200, response_model=HelloResponse) def hello(name: str): """Say hello from Tornado""" return HelloResponse(message=f"Hello, {name}! It's Tornado!") async def main(): app.listen(8000) await asyncio.Event().wait() if __name__ == "__main__": asyncio.run(main())
第二步: 运行服务器
启动应用:
python main.py
启动后,文档可以通过以下地址访问:
Swagger UI:
http://127.0.0.1:8000/docs
ReDoc UI:
http://127.0.0.1:8000/redoc
⚙️ 功能特性
- 使用 Pydantic v2 生成 OpenAPI schemas。
- 使用 Pydantic 模型进行数据验证。
- 支持多种框架: Falcon, Flask, Quart, Sanic, Starlette, Tornado。
- Proxy routing 提供 FastAPI 风格的路由
📖 文档
请访问 Docs 以了解 FastOpenAPI 的概述、核心组件和使用指南。文档会持续更新和改进。
📂 高级示例
每个框架的集成和详细使用示例都可以在 examples
目录中找到。
📊 简单性能测试
快速但并非完美的基准测试。请查看 benchmarks
目录了解详情。
✅ 开发建议
- 使用 Pydantic 模型进行严格的类型检查和数据验证。
- 遵循提供的示例中的项目结构,以便轻松扩展。
- 定期更新依赖项,并监控库更新以获取新功能。
🛠️ 贡献
如果您有建议或发现错误,请在 GitHub 上提出 issue 或创建 pull request。
📄 License
该项目基于 MIT license 授权。