官方文档: https://fastapi.tiangolo.com/
1、安装第三方库老生常谈了,使用 pip 或者 pipenv 即可安装 FastApi:
pip install fastapi
pipenv install fastapi
2、安装后,来创建我们的第一个 API:
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def index():
return {'message': '你已经正确创建 FastApi 服务!'}
这里的写法跟 Flask 几乎一致。只不过在 Flask 中,我们定义路由的装饰器为 @app.route('/')
。而这里写为 @app.get('/')
。
写好代码以后,使用uvicorn来运行 FastApi。首先使用pip或者pipenv安装uvicorn:
pip install uvicorn
pipenv install uvicorn
然后执行命令:
uvicorn main:app --reload
其中main表示我们的代码文件为main.py,app表示我们初始化的 FastApi 对象的名字。--reload参数表示在修改了代码以后立即生效,不需要重启。
运行后,访问 http://127.0.0.1:8000 可以看到接口已经正确返回了 JSON 格式的数据。
3、定义一个带参数的 GET 方法:
@app.get('/query/{uid}')
def query(uid):
msg = f'你查询的 uid 为:{uid}'
return {'success': True, 'msg': msg}
如果想限定 uid 只能是数字,不能是字符串怎么办呢?你只需要多加 4 个字符:
@app.get('/query/{uid}')
def query(uid: int):
msg = f'你查询的 uid 为:{uid}'
return {'success': True, 'msg': msg}
4、定义一个资源的 POST 方法。
在使用 Flask 的时候,我们需要手动验证用户 POST 提交上来的数据是什么格式的,字段对不对。
但使用 FastApi 的时候,我们只需要类型标注就能解决所有问题。首先我们导入 from pydantic import BaseModel
,然后继承BaseModel实现我们允许 POST 方法提交上来的数据字段和格式:
from pydantic import BaseModel
app = FastAPI()
class People(BaseModel):
name: str
age: int
address: str
salary: float
People这个类通过类型标注,指定了它里面的 4 个字段和他们的类型。现在来实现 POST 方法:
@app.post('/insert')
def insert(people: People):
age_after_10_years = people.age + 10
msg = f'这个人的名字是:{people.name},十年后,此人年龄:{age_after_10_years}'
return {'success': True, 'msg': msg}
insert函数的参数people通过类型标注指定为People类型。
当我们使用 POST 方式提交数据时,FastApi 自动会以People中定义的字段为基准来校验数据,发现不对就返回报错信息。
另外,FastApi 会自动帮我们生成接口文档,访问http://127.0.0.1:8000/docs,看到接口文档已经生成好了。