作者:麦克煎蛋 出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!
一、依赖项
Python 3.6+
FastAPI 站在这些巨人的肩膀上
可选依赖项:
Pydantic需要:
ujson
- 比较快的 JSON 解析.email_validator
- email 校验.
Starlette需要:
requests
-TestClient 需要
.aiofiles
-FileResponse
或者StaticFiles 需要
.jinja2
- 缺省模板配置需要.python-multipart
- 表单解析需要.itsdangerous
-SessionMiddleware
支持需要.pyyaml
- Starlette'sSchemaGenerator
支持需要.graphene
-GraphQLApp
支持需要.ujson
-UJSONResponse 需要
.
FastAPI / Starlette需要:
你可以通过以下命令安装以上所有安装包:
pip install fastapi[all]
二、安装
1、pip install fastapi
2、我们需要一个ASGI服务器,可以使用 Uvicorn 或 Hypercorn。
pip install uvicorn
三、示例
1、新建文件main.py
from fastapi import FastAPI app = FastAPI() @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}
或者使用async定义函数:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
2、运行
uvicorn main:app --reload
输出结果:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
关于命令
的解释:
main
: 文件main.py
(Python "模块").app
:main.py
创建的实例app = FastAPI()
.--reload
: 代码有改动时服务会自动重启(仅适用于开发环境)
3、接口访问
在浏览器中访问地址:http://127.0.0.1:8000/items/5?q=somequery
我们可以看到响应结果:
{"item_id": 5, "q": "somequery"}
4、我们实际上实现了具有以下功能的一个API:
- 接收以下路径的HTTP请求:
/
和/items/{item_id}
. - 这两个路径都接收GET请求.
- 路径
/items/{item_id}
具有一个路径参数item_id
并且类型必须为int
. - 路径
/items/{item_id}
具有一个可选的查询参数 q 并且类型必须为 str.
四、交互式API文档
我们访问以下两个地址,可获取自动生成的交互式API文档,并且当代码改动时文档会自动更新。方便我们的开发调试。
1、http://127.0.0.1:8000/docs (基于 Swagger UI)
2、http://127.0.0.1:8000/redoc (基于 ReDoc)