FastAPI 是一个轻量级的后端框架,对于定制化不高或者功能简单的业务完全可以拿他作为后台。 FastAPI 一个比较重要的特性就是异步,简单来说就是相比 django 和 flask 快,FastAPI 和 flask 的语法类似。本篇文章介绍 FastAPI 运用的简单实例,通过 FastAPI 创建接口输出 "hello world" 字符!
目录
1 FastAPI 介绍及安装
1.1 介绍
1.2 FastAPI 安装
① 一步到位
② 分步安装
2 hello world
2.1 demo
2.2 交互式 API 文档
2.3 分步概括
① 导入 FastAPI
② 创建一个 FastAPI「实例」
③ 创建一个路径操作
④ 定义路径操作函数
⑤ 返回内容
1 FastAPI 介绍及安装
1.1 介绍
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
文档:FastAPI (tiangolo.com)
源码:https://github.com/tiangolo/fastapi
📌 主要特性:
- 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic),最快的 Python web 框架之一。
- 高效编码:提高功能开发速度约 200% 至 300%。
- 更少 bug:减少约 40% 的人为(开发者)导致错误。
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
以上是 FastAPI 对自己的一顿猛夸~
1.2 FastAPI 安装
① 一步到位
pip install "fastapi[all]"
以上安装还包括了 uvicorn,可看作是 FastAPI 运行代码的服务器。
② 分步安装
如果想将应用程序部署到生产环境,可以执行以下操作:
pip install fastapi
pip install "uvicorn[standard]"
2 hello world
2.1 demo
将下面的内容丢到 main.py 的文件
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
📌 (1)终端启动
使用终端开启 uvicorn 服务
uvicorn main:app --reload
main:main.py 文件(一个 Python「模块」)。
app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
--reload:让服务器在更新代码后重新启动,仅在开发时使用该选项。
也可使用 --host 127.0.0.1 --port 8001,进行 ip 地址和端口的指定。
📌 (2)main 方法启动
有时我们可以直接用 main 方法启动,这样更方便些
if __name__ == '__main__':import uvicornuvicorn.run(app,host="127.0.0.1",port=8080)
然后可以看到如下输出 👇
然后打开浏览器,输入127.0.0.1:8000 👇,可看到如下如下 JSON 响应,说明项目启动成功!
若非指定,ip 地址将是 127.0.0.1,端口则是 8000。
2.2 交互式 API 文档
FastAPI 还提供自动生成接口文档的功能,如果是 spring boot 项目的话则需要引入 swagger 依赖了,该 API 文档严格遵循 OpenAPI 标准。
书接上文,此时访问 http://127.0.0.1:8000/docs#/,你将会看到自动生成的API交互文档 👇
前后端可以根据该接口文档进行交互或是进行接口测试。
2.3 分步概括
编写一个 FastAPI 程序大致分为五步,下边是一个完整的例子:
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}
① 导入 FastAPI
from fastapi import FastAPI
FastAPI 是直接从 Starlette 继承的类。
你可以通过 FastAPI 使用所有的 Starlette 的功能。
② 创建一个 FastAPI「实例」
app = FastAPI()
这里的变量 app 会是 FastAPI 类的一个「实例」。
这个实例将是创建你所有 API 的主要交互对象。
这个 app 同样在如下命令中被 uvicorn 所引用,如 uvicorn main:app --reload
③ 创建一个路径操作
这里的「路径」指的是 URL 中从第一个 / 起的后半部分,比如 https://example.com/items/foo 的路径便是 /items/foo。
@app.get("/")
你可以将 get 操作方法更改成 @app.post()、@app.put()、@app.delete() 等方法
你可以更改相应的路径("/")为自己想要的,例如我更改为("/hello/")
④ 定义路径操作函数
「路径操作函数」可做如此区分:
- 路径:是 /。
- 操作:是 get。
- 函数:是位于「装饰器」下方的函数(位于 @app.get("/") 下方)。
def root():
在这个例子中,它是一个 async 函数,你也可以将 async 去掉。
⑤ 返回内容
return {"message": "Hello World"}
你可以返回一个 dict、list,像 str、int 一样的单个值,等等。
你还可以返回 Pydantic 模型,都将自动转换为 JSON 的对象和模型(包括 ORM 对象等)。