简介
FastAPI
是一个用于构建 API
的现代、快速(高性能)的 web
框架,使用 Python 3.6+
并基于标准的 Python
类型提示。
关键特性:
- 快速:可与
NodeJS
和Go
比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的Python web
框架之一。 - 高效编码:提高功能开发速度约 200% 至 300%。
- 更少 bug:减少约 40% 的人为(开发者)导致错误。
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger)和JSON Schema。
以上这些特性均为官方介绍的特性,咱也不知道,反正也用着,过程中实践这些关键特性
安装 FastAPI
第一个步骤是安装 FastAPI
:
1pip install fastapi
然后再并安装uvicorn
来作为服务器:
1pip install uvicorn
当然你也可以直接安装所有(包括依赖包)
pip install fastapi[all]
第一个Fastapi实例
最简单的 FastAPI
文件可能像下面这样:
1from fastapi import FastAPI
2
3app = FastAPI()
4
5
6@app.get("/")
7async def root():
8 return {"message": "Hello World"}
命令行运行:
1lifeng@192 pythonFastapi % uvicorn main:app --reload
2INFO: Will watch for changes in these directories: ['/Users/lifeng/python-projects/python-code/pythonFastapi']
3INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
4INFO: Started reloader process [25075] using statreload
5INFO: Started server process [25077]
6INFO: Waiting for application startup.
7INFO: Application startup complete.
- uvicorn main:app 命令含义如下:
main:main.py 文件(一个 Python「模块」)。
app:在 main.py 文件中通过 app = FastAPI() 创建的对象。
--reload:让服务器在更新代码后重新启动。仅在开发时使用该选项。
在输出中,会有一行信息像下面这样:
1INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
该行显示了你的应用在本机所提供服务的 URL 地址。
查看
打开浏览器访问 http://127.0.0.1:8000
。
你将看到如下的 JSON
响应:
1{"message": "Hello World"}
交互式 API 文档
跳转到 http://127.0.0.1:8000/docs
。
你将会看到自动生成的交互式 API 文档(由 Swagger UI 提供):
图片
可选的 API 文档
前往 http://127.0.0.1:8000/redoc
。
你将会看到可选的自动生成文档 (由 ReDoc 提供):
图片
查看 openapi.json
如果你对原始的 OpenAPI 模式长什么样子感到好奇,其实它只是一个自动生成的包含了所有 API 描述的 JSON。
你可以直接在:http://127.0.0.1:8000/openapi.json
看到它。
它将显示以如下内容开头的 JSON:
1{
2 "openapi": "3.0.2",
3 "info": {
4 "title": "FastAPI",
5 "version": "0.1.0"
6 },
7 "paths": {
8 "/": {
9 "get": {
10 "summary": "Root",
11 "operationId": "root__get",
12 "responses": {
13 "200": {
14 "description": "Successful Response",
15 "content": {
16 "application/json": {
17 "schema": {}
18 }
19 }
20 }
21 }
22 }
23 }
24 }
25}
分步编写脚本
步骤 1:导入 FastAPI
新建一个工程目录,在工程目录中新建一个.py
文件(文件名称自定义即可)
from fastapi import FastAPI
FastAPI
是一个为你的 API
提供了所有功能的 Python
类。
步骤 2:创建一个 FastAPI
app = FastAPI()
这里的变量 app
是 FastAPI
类的一个实例。
这个实例将是创建你所有 API
的主要交互对象。
这个 app
同样在如下命令中被 uvicorn
所引用:
PS E:\git_code\python-code\fastapiProject> uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['E:\\git_code\\python-code\\fastapiProject']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [8908] using statreload
WARNING: The --reload flag should not be used in production on Windows.
INFO: Started server process [12500]
INFO: Waiting for application startup.
INFO: Application startup complete.
步骤 3:创建一个路径操作
- 路径
这里的「路径」
指的是 URL 中从第一个/
起的后半部分。
所以,在一个这样的 URL 中:
https://www.baidu.com/items/foo
…路径会是:
/items/foo
「路径」
也通常被称为「端点」
或「路由」
。
- 操作
这里的「操作」
指的是一种HTTP「方法」
。
下列之一:
POST
GET
PUT
DELETE
…以及更少见的几种:
OPTIONS
HEAD
PATCH
TRACE
在 HTTP 协议中,你可以使用以上的其中一种(或多种)「方法」与每个路径进行通信。
在开发 API 时,你通常使用特定的 HTTP 方法去执行特定的行为。
通常使用:
POST:创建数据。
GET:读取数据。
PUT:更新数据。
DELETE:删除数据。
因此,在 OpenAPI 中,每一个 HTTP 方法都被称为「操作」
。
我们也打算称呼它们为「操作」。
- 定义一个路径操作装饰器
@app.get("/")
@app.get("/")
告诉FastAPI
在它下方的函数负责处理如下访问请求:
请求路径为 /
使用 get 操作
你也可以使用其他的操作:
@app.post()
@app.put()
@app.delete()
以及更少见的:
@app.options()
@app.head()
@app.patch()
@app.trace()
步骤 4:定义路径操作函数
这是我们的「路径操作函数」
:
路径:是 /。
操作:是 get。
函数:是位于「装饰器」下方的函数(位于 @app.get("/") 下方)。
@app.get("/")
def root():
这是一个 Python 函数。
每当 FastAPI
接收一个使用GET
方法访问URL「/」
的请求时这个函数会被调用。
当然你也可以定义为async
函数(也成为协程的异步代码):
@app.get("/")
async def root():
步骤 5:返回内容
@app.get("/")
async def root():
return "hello world"
你可以返回一个 dict
、list
,像 str
、int
一样的单个值,等等。
你还可以返回 Pydantic
模型(后续了解)。
运行代码,并访问API
PS E:\git_code\python-code\fastapiProject> uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['E:\\git_code\\python-code\\fastapiProject']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [8908] using statreload
WARNING: The --reload flag should not be used in production on Windows.
INFO: Started server process [12500]
INFO: Waiting for application startup.
INFO: Application startup complete.
WARNING: StatReload detected file change in 'main.py'. Reloading...
WARNING: The --reload flag should not be used in production on Windows.
INFO: Started server process [6808]
INFO: Waiting for application startup.
INFO: Application startup complete.
访问地址:http://127.0.0.1:8000/
访问地址:http://127.0.0.1:8000/docs
访问地址:http://127.0.0.1:8000/redoc
如果你对原始的 OpenAPI
模式长什么样子感到好奇,其实它只是一个自动生成的包含了所有API
描述的JSON
。访问地址:http://127.0.0.1:8000/openapi.json
{
"openapi": "3.0.2",
"info": {
"title": "FastAPI",
"version": "0.1.0"
},
"paths": {
"/": {
"get": {
"summary": "Root",
"operationId": "root__get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
}
}
}
今天先聊到这里吧,以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,直接私信留言会及时修正发布;非常期待你的一键④连【 赞赏、点赞、在看、分享 】哟,谢谢!
未完成,待续……
一直在努力,希望你也是!
微信号:waiting940601
文章作者:李锋;编辑排版:梁莉莉
