本文为系列文章Python开发框架FastAPI系列的第一部分。
缘起
其实Python的Web开发框架已经有很多了,包括老将Django和后起之秀Flask都做得很好,各有各的特色。那么为什么FastAPI作为一个后来者,短时间内就人气飙升呢?我也是看到很多招聘描述上提到了这个框架,产生了兴趣想去学习这个框架的意向。
根据官网的介绍,我们可以了解FastAPI的基本特点:
FastAPI framework, high performance, easy to learn, fast to code, ready for production
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.
- 高性能
- 容易学习
- 编码迅速
- 生产环境可用
在这个系列文章中,我们逐步来展开讨论这些特点,看看官方介(chui)绍 (xu)的是不是很符合事实。
创世纪
安装很简单(感谢美丽善良的pip)
$ pip install fastapi
然后按照惯例,先上前菜hello world。
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "FastAPI"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
如果小伙伴们有过其他Web开发框架例如Flask, NodeJS Express的开发经验,阅读这个代码应该没有任何问题。注意因为FastAPI是一个现代的框架,用了包括Type Hints在内的一些Python语言特性。对Type Hints不熟悉的同学推荐参考本人拙作Python中的typings-CSDN博客。
上面代码核心的部分就是导入fastapi包,并且实例化app对象。
from fastapi import FastAPI
app = FastAPI()
然后通过Python注解来标注路由规则,例如
@app.get("/items/{item_id}") # 路由规则
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
函数read_item则是一个控制器(也就是MVC中的Controller),它实现了具体的业务逻辑,并且返回了操作结果的恰当表示,这里返回的格式为JSON。
如何运行
将上面的代码保存为main.py,然后执行
fastapi dev main.py
就可以运行起来了。是不是很简单?
然后可以打开浏览器或者使用Postman,curl之类的兵器来测试这个应用,这里不再赘述了。
亮点:自动生成交互式文档
从FastAPI的名字来看,大家也能猜测到它的一个出发点是快速开发Web API的。而目前占据Web API统治地位的依然是RESTful API。既然有API,那么文档不可少。写文档难,维护文档更难。因为文档难搞,又没有成就感,所以很多同学都不乐意写文档,造成了大多数项目文档缺失和文档质量低下等问题。但是FastAPI的一个特点,就是能够自动生成交互式的文档。这个特性真的是亮瞎了我的狗眼。我还清晰记得以前做的JAVA服务上线后,痛苦地补写文档的日子。
在浏览器中打开地址http://127.0.0.1:8000/docs, 你会看到基于Swagger UI的可交互文档已经帮你生成好了。
这些文档基于open API Spec,依靠给力的Swagger UI,都是可以交互使用的。想象一下,通过FastAPI实现的服务上线了,文档也就同步完成了,对于开发者来说是不是很美妙?
另外FastAPI也集成了Redoc,这样可以给API的使用者提供更美观的参考文档。小伙伴们亲自试一试 http://127.0.0.1:8000/redoc
FastAPI的初体验就写到这里打住了,喜欢的朋友们请 tuple(点赞,收藏,关注)一下哦。你轻轻动动手指,就是为我添加巨大动力。炎炎夏日,也要动力澎湃。努力学习,做更好的自己~