FastAPI,一款实用的web框架_ico


Java出身的程序员也许知道利用Spring Mvc框架开发一个web应用多麻烦,当然Python也提供一些轻量级的web框架,如Django、Flask。我曾经就使用过Flask开发过mock平台和小工具平台,但是Python栈的web框架缺点就是并发性相对比较差,如果请求量级上来了,服务性能就会差一些,适合做一些对性能要求不是太高的“玩意”。



当然今天的主角不是上述提到的,而是FastApi,一个用于构建 API 的现代、快速(高性能)的web框架。下面就给大家做一个入门ABC,讲解一下其特点以及如何使用。

特点


  • 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
  • 高效编码:提高功能开发速度约 200% 至 300%。


  • 更少bug:减少约 40% 的人为(开发者)导致错误。
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。


  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

话不多说,先上个小菜开开胃。

pip install fastapi
安装uvicorn来作为服务器:
pip install uvicorn[standard]

第一行代码

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"message": "Hello World"}

FastAPI,一款实用的web框架_ico_02

FastAPI,一款实用的web框架_ico_03

INFO:Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

该行显示了你的应用在本机所提供服务的 URL 地址

FastAPI,一款实用的web框架_ico_04

交互式 API 文档

跳转到 http://127.0.0.1:8000/docs。你将会看到自动生成的交互式 API 文档。

FastAPI,一款实用的web框架_web框架_05

开发步骤

步骤 1:导入 FastAPI

from fastapi import FastAPI

app = FastAPI()

FastAPI 是一个为你的 API 提供了所有功能的 Python 类。


技术细节

FastAPI 是直接从 Starlette 继承的类。

你可以通过 FastAPI 使用所有的 Starlette 的功能。


步骤 2:创建一个 FastAPI「实例」

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}

这里的变量 app 会是 FastAPI 类的一个「实例」。

这个实例将是创建你所有 API 的主要交互对象。

这个 app 同样在如下命令中被 uvicorn 所引用:

FastAPI,一款实用的web框架_web框架_06

如果你像下面这样创建应用:

from fastapi import FastAPI

my_awesome_api = FastAPI()

@my_awesome_api.get("/")
async def root():
return {"message": "Hello World"}

将代码放入 main.py 文件中,然后你可以像下面这样运行 uvicorn:

FastAPI,一款实用的web框架_python_07

步骤 3:创建一个路径操作

路径

这里的「路径」指的是 URL 中从第一个 / 起的后半部分。

所以,在一个这样的 URL 中:

​https://example.com/items/foo​

...路径是:/items/foo

「路径」也通常被称为「端点」或「路由」。

开发 API 时,「路径」是用来分离「关注点」和「资源」的主要手段。

操作

这里的「操作」指的是一种 HTTP「方法」。

下列之一:


  • POST
  • GET


  • PUT
  • DELETE

...以及更少见的几种:


  • OPTIONS
  • HEAD


  • PATCH
  • TRACE

在 HTTP 协议中,你可以使用以上的其中一种(或多种)「方法」与每个路径进行通信。

在开发 API 时,你通常使用特定的 HTTP 方法去执行特定的行为。

通常使用:


  • POST:创建数据。
  • GET:读取数据。


  • PUT:更新数据。
  • DELETE:删除数据。

因此,在 OpenAPI 中,每一个 HTTP 方法都被称为「操作」。

我们也打算称呼它们为「操作」。

定义一个路径操作装饰器

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"message": "Hello World"}

@app.get("/") 告诉 FastAPI 在它下方的函数负责处理如下访问请求:


  • 请求路径为 /
  • 使用 get 操作

FastAPI,一款实用的web框架_ico_08

你也可以使用其他的操作:


  • @app.post()
  • @app.put()

  • @app.delete()

以及更少见的:


  • @app.options()
  • @app.head()


  • @app.patch()
  • @app.trace()

FastAPI,一款实用的web框架_python_09

步骤 4:定义路径操作函数

这是我们的「路径操作函数」:


  • 路径:是 /。
  • 操作:是 get。
  • 函数:是位于「装饰器」下方的函数(位于 @app.get("/") 下方)。

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():

return {"message": "Hello World"}

这是一个 Python 函数。

每当 FastAPI 接收一个使用 GET 方法访问 URL「/」的请求时这个函数会被调用。

在这个例子中,它是一个 async 函数。

你也可以将其定义为常规函数而不使用 async def:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def root():
return {"message": "Hello World"}

步骤 5:返回内容

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():

return {"message": "Hello World"}

你可以返回一个 dict、list,也可以像 str、int 一样的单个值,等等。