参考: https://fastapi.tiangolo.com/zh/learn/ https://www.runoob.com/fastapi/fastapi-form.html https://blog.csdn.net/qq_39172059/article/details/136518206
一、什么是FastAPI?
FastAPI是一个现代、快速(高性能)的python web框架,基于标准的python类型提示,使用python3.6+构建的web框架。
FastAPI的架构为RESTful风格,RESTful是一种网络应用程序的设计风格和开发方式,其特点为每一个URI代表一种资源,客户端通过GET、POST、PUT、DELETE等动作,对服务器端资源进行操作。
( 一)环境准备
1.安装FastAPI:pip install fastapi
(交互文档需要访问外部资源,行内在1.0.3版本中将外部资源转为行内资源,若行内网络使用请指定版本1.0.3)
2.安装ASGI服务:pip install uvicorn
(二)入门示例
- 新建一个main.py文件,编写如下:
from fastapi import FastAPI
app = FastAPI()
[@app](/user/app).get('/')
def root():
return {'message': 'Hello World'}
- 启动服务
命令:uvicorn main:app --reload
² main:文件main.py(python模块)
² app:在模块中app=FastAPI()行中创建的对象
² --reload:代码更改后自动重启服务(上线时该参数值不能为true,降低性能)
启动服务后终端将会看到如下输出:
- 访问服务
启动服务后,使用浏览器访问127.0.0.1:8000,
可以得到{“Hello”:“World”} ,说明环境安装成功。
- API交互文档
启动服务后,FastAPI会自动给生成两个交互文档:
SwaggerUI:http://127.0.0.1:8000/docs
ReDoc:http://127.0.0.1:8000/redoc
http://127.0.0.1:8000/openapi.json
- 查看openapi.json
http://127.0.0.1:8000/openapi.json
- 本地部署
命令:uvicorn main:app --host 0.0.0.0 --port 8000
² main:启动服务的py文件名
² app:服务对象名
² --host:IP地址
² --port:端口
本地部署后,可通过外部访问本地启动服务。
(三)入门示例了解FastAPI结构
from fastapi import FastAPI
app = FastAPI()
[@app](/user/app).get('/')
def root():
return {'message': 'Hello World'}
- 导入FastAPI
from fastapi import FastAPI
- 创建一个app实例
app = FastAPI()
- 编写路径操作装饰器
[@app](/user/app).get('/')
(1)使用get请求,也可使用其他请求方法的装饰器
@app.post()
@app.put()
@app.delete()
@app.options()
@app.head()
@app.patch()
@app.trace()
(2)路径(’/’) 自定义
- 定义路径操作函数
def root():
return {'message': 'Hello World'}
```
(1)python函数;
(2)当FastAPI接收一个使用GET方法访问路径为/的请求时这个函数会被调用;
(3)此处的返回值可以是:字典,列表,单独的值:比如str,int,Pydantic模型,自动转换为JSON的对象和模型。
5. 运行开发服务
```python
uvicorn main:app
此处可以执行要运行的服务器IP和端口号,默认IP :127.0.0.1,端口:8000
uvicorn main:app --host 127.0.0.1 --port 8080
二、uvicorn启动方式
(一)使用命令行运行
按入门示例的方式,在py文件所在目录下的命令行中运行。
(二)使用uvicorn.run()
三、接口文档注释
(一)注释类型
1.title标题
2.description描述
3.summary注释
4.tags标签
示例:
rom fastapi import FastAPI
app = FastAPI(title='测试api应用程序', description='整体描述')
[@app](/user/app).get(path='/', summary='接口注释', description='接口描述', tags= ['Root'])
def read_root():
return {"Hello": "World"}