如果你之前有接触 python 测试开发,那你应该会听过 django 或者 flask。 但是最近一个新的框架出现在人们的视野中,短短 1 年在 GitHub 上就收集了 20000+ star, 成为一个不折不扣的明星项目。
这个项目是由塞巴斯蒂安·拉米雷斯(Sebastian Ramírez)创建的,他在实现一个机器学习项目的时候创建了这个框架,并且优化至今。拉米雷斯留着达利那样的胡子,看起来像一个艺术家。
这个框架有什么高级特性让他在这么短时间内可以追赶 django 和 flask 呢?
- FastAPI 的使用方法和设计参考了几十个 python 明星项目,博采众长,吸收各家精华;
- FastAPI 和 Flask 一样简约
- FastAPI 非常新,并且基于 python3.6 的类型声明系统。
- 自动生成文档
- 类型声明和数据检验
- 内置身份认证
- 性能强
- 原生支持异步
- 强大的依赖注入系统
- GraphQL 和 Websocket 支持
自动文档
FastAPI 内置 2 种文档:swaggerui 和 Redoc, 当你编写好接口以后,可以直接查看文档,甚至可以进行简单的测试。这些都是由FastAPI自动打包的。允许您将更多精力放在代码上,而不是设置工具。
类型声明
一直以来,python 的类型传递都是被诟病的,在 python3.6 以后,类型声明已经比较完善,而 Pydantic 这个库基于 python 的标准语法进行类型检查。 FastAPI 集成了 pydantic 这个优秀的库进行数据检验, 让你用更少的代码方便的进行数据检验。
而且加了类型声明以后,你能更方便的在 pycharm 这样的工具当中得到代码智能提示,这点比 Flask 好太多了。
数据检验
由于集成了 Pydantic。您可以验证任意的 python 标准类型,也可以验证其他的数据,比如:
- JSON对象(dict)
- JSON数组(list)
- 具有最小和最大长度的字符串(str)
- 带最小值和最大值的 float
- 统一资源定位地址(URI)
- 电子邮件(Email)
- UUID
身份认证
这是任何API的关键部分,现代社会几乎任何的产品和服务都需要你登录。FastAPI 把标准的身份认证集成到了框架内部。它提供
- HTTP Basic
- OAuth2 (JWT tokens)
- 放在 header, 查询字符串或者 cookie 中的 key
性能
这恐怕是 FastAPI 最值得炫耀的地方。它太快了!不仅编码速度快,而且处理请求的速度也非常快!你可以在 techempower 查询到最新的性能表现对弈。
天生支持异步
使用 FastAPI 你可以写同步代码,但是如果你需要一些异步操作,你可以非常轻松的完成切换。最简单的,你可以直接在函数前面加一个 async, 这个在 Flask 当中是不能做的, 在 django 中也并不容易。
@app.post('/user')
async def user(req: Request):
user = await req.form()
return pages.TemplateResponse(
'user.html',
{'request': req, 'uid': user.get('username', '')}
)
强大的依赖注入系统(Dependcy Injection)
FastAPI 的依赖注入非常炫酷,他允许你通过非常简单的方式去解决一些依赖问题,不需要多余的配置。比如如果你想在处理请求时操作数据库,你可以把数据库操作注入:
@app.post("/articles/{article_id}/comments")
def post_comment(article_id: int, comment: Comment, database = Depends(get_database)):
# database 数据库操作
return {"msg": "comment posted!"}
GraphQL 和 WebSocket 支持
GraphQL 在使用复杂的数据模型时比 REST 有用多了。当前端的微小变化需要后端的查询数据时表象非常亮眼。Flask 和 Django 可以安装插件处理,在 FastAPI 中,这是经过集成的。FastAPI 同样支持 WebSocket
总结
FastAPI 是你在进行 python web 开发的时候不容错过的一个框架。以前的 web 框架设计之初都是开发网站的,所以通常带有 HTML 模板渲染,而 FastAPI 专心给你提供 API, 如果你像让他返回 HTML, 也可以轻松引入模板引擎。
欢迎来到testingpai.com!
注册 关于