fastapi介绍(三):简单应用升级
2019-09-25 本文已影响0人
warmsirius
一、main.py升级
现在我们把笔记(二)中的main.py修改一下代码:
使用Pydantic模块,实现用标准的python类来声明请求体
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
二、API交互文档
现在打开 http://127.0.0.1:8000/docs.
- 交互的API文档已经被更改了,包含了新的内容:
- 点击上面的 "Try it out",它提示你填入参数,并且该参数会传入到这个API接口
- 然后点击这个 "Execute" 按钮,然后用户界面会和你的API进行交互,发送该参数,并且会把返回的结果显示在屏幕上。
三、可选的API交互文档
四、概括
总的来说,你一旦定义了参数的类型,或者是请求体的类型等作为视图函数的参数,你就相当于定义了标准的Python类型。
你不必去学一个新语法、新方法或者一个指定库的类等等。只需要使用标准的Python3.6+的版本即可。
例如,对于一个整数:
item_id: int
或者对于一个更复杂的Item的模型:
item: Item
并且通过这个单一的申明,你可以获得:
1. 编辑器支持:
- 完整性检查
- 类型检查
2. 数据校验:
- 数据无效时自动清除错误
- 即使是深层嵌套的JSON对象,也支持验证
3. 输入数据的转换:将网络传输的数据转变成Python数据和Python类型
- JSON
- 路径的参数
- 查询的参数
- Cookies
- Header:请求头
- Forms:表单
- Files:文件类型
4. 输出数据的转换:将Python数据或Python类型转换成网络传输的数据(转变为JSON)
- 转变Python 类型(str, int, float, list, etc)
- 日期时间类型
- UUID类型
- 数据模型类
- ....等等
5. 自动交互的API文档,可以有两种用户交互界面
- Swagger UI.
- ReDoc.
回到当前项目
我们回到之前的fastapi的项目代码,FastAPI将会:
- 验证在GET/PUT请求是否有一个item_id在path中
- 验证在GET/PUT请求中,item_id是不是整数类型,如果不是,则客户端会看见一个有用的错误信息
- 检查url中是否有选择查询参数q在GET请求中,该参数默认是None,是可选参数,如果不是None,那么默认为必须参数
-
- 对于PUT请求: /items/{item_id}, 请求体默认为JSON
- 检查是否必选参数name属性,且类型为str
- 检查是否必选参数price属性,且类型为float
- 检查是否有可选参数属性 is_offer,如果有的话,且类型为bool
- 这些同样也对深层嵌套的JSON对象适用
- 将form类型自动转换为JSON
-
- OpenAPI将会把所有的API接口排列出来,能被以下场景使用
- 交互的文档系统
- 对很多语言,自动生成代码客户端系统
- 直接提供2个网页交互页面
Convert from and to JSON automatically.
Document everything with OpenAPI, that can be used by:
Interactive documentation systems.
Automatic client code generation systems, for many languages.
Provide 2 interactive documentation web interfaces directly.