FastAPI,一款实用的web框架

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"}

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

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

交互式 API 文档

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

开发步骤

步骤 1:导入 FastAPI

from fastapi import FastAPI

app = FastAPI()

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

技术细节

FastAPI 是直接从 Starlette 继承的类。

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

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

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

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

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

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

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

from fastapi import FastAPI

my_awesome_api = FastAPI()

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

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

步骤 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 操作

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

  • @app.post()

  • @app.put()

  • @app.delete()

以及更少见的:

  • @app.options()

  • @app.head()

  • @app.patch()

  • @app.trace()

步骤 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 一样的单个值,等等。

好文推荐

往期推荐

接口间参数传递的一种解决方案

经验分享|测试工程师转型测试开发历程

技术面必考:多线程、多进程

接口测试框架开发实践2:接口自动化测试框架设计思路

接口自动化测试框架实践1:接口测试概述

我在阿里做测开

posted @ 2022-07-24 18:23  QualityAssurance21  阅读(635)  评论(0编辑  收藏  举报