FastApi的搭建与测试

一、FastAPI的安装及使用详解

1-1、使用 pip 安装 FastAPI

首先,我们来安装 FastAPI。由于 FastAPI 本身依赖于 Python 的一些库,最简单的安装方法就是通过 pip 来进行安装。在国内,我们可以使用阿里云的 pip 镜像源来加快安装速度。执行以下命令来安装 FastAPI:

pip install fastapi -i https://mirrors.aliyun.com/pypi/simple

FastAPI 是一个用于构建现代 Web APIs 的快速 Python Web 框架,基于 Python 3.7+ 及以上版本,同时利用了 Python 类型提示的特性,使其在编写代码时既直观又高效。

1-2、安装 Uvicorn 作为 ASGI 服务器

由于 FastAPI 是基于 ASGI(Asynchronous Server Gateway Interface)的异步框架,Uvicorn 是目前最流行的 ASGI 服务器之一,能够为 FastAPI 提供高效的异步支持。因此,我们还需要安装 uvicorn 来启动 FastAPI 应用:

pip install uvicorn -i https://mirrors.aliyun.com/pypi/simple

安装完毕后,我们可以通过创建一个简单的 FastAPI 应用来验证安装是否成功。


2、验证安装

为了验证安装的成功与否,我们可以创建一个简单的 FastAPI 应用。首先,创建一个名为 main.py 的 Python 文件,内容如下:

from fastapi import FastAPI

app = FastAPI()

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

在这个简单的应用中,我们定义了一个根路径 /,当用户访问该路径时,FastAPI 会返回一个 JSON 响应:{"message": "Hello World"}

2-1、运行 FastAPI 应用

要运行这个 FastAPI 应用,我们需要使用 uvicorn。通过以下命令启动:

uvicorn main:app --reload

此命令的含义如下:

  • main:表示 main.py 文件,也就是我们创建的 Python 模块。
  • app:表示我们在 main.py 文件中定义的 FastAPI 实例对象 app
  • --reload:表示在代码更新时,服务器会自动重新加载。这个选项通常用于开发阶段,使得我们在更改代码后不必手动重启服务器。

如果安装和启动都正确,我们会看到如下输出:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [8438] using statreload
INFO:     Started server process [8440]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

现在,打开浏览器,访问 http://127.0.0.1:8000,我们应该会看到如下的 JSON 响应:

{"message": "Hello World"}

这说明 FastAPI 和 Uvicorn 已成功安装并运行。


3、交互式 API 文档

FastAPI 的一大特色是自动生成交互式 API 文档。默认情况下,当启动 FastAPI 应用时,它会自动生成一套 Swagger 风格的 API 文档,并集成在 /docs 路径下。

3-1、查看自动生成的文档

在浏览器中跳转到 http://127.0.0.1:8000/docs,我们可以看到 FastAPI 自动生成的交互式文档界面。这是基于 Swagger UI 的 API 文档,开发者可以通过该文档直接测试 API 接口,极大地提升了开发效率。

FastApi的搭建与测试_第1张图片

这个文档可以自动更新,如果我们修改或添加新的 API 路由,文档也会随之更新。

此外,FastAPI 还生成了另一个基于 ReDoc 的文档界面,可以通过 http://127.0.0.1:8000/redoc 访问。ReDoc 是另一种风格的 API 文档,适合更多层次的需求。


4、路径参数和查询参数

FastAPI 非常灵活,支持通过路径参数和查询参数来接收请求数据。

4-1、路径参数

路径参数是通过 URL 路径传递的参数。例如,在以下示例中,我们通过 {item_id} 来声明路径参数:

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: str):
    return {"item_id": item_id}

当用户访问 /items/foo 时,FastAPI 会自动将路径中的 foo 传递给 item_id 参数,返回的结果为:

{"item_id": "foo"}

4-2、查询参数

除了路径参数,FastAPI 还支持查询参数。查询参数通常通过 URL 的 ? 符号后跟参数名称传递。例如,以下代码声明了一个可选的查询参数 q

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None):
    if q:
        return {"item_id": item_id, "q": q}
    return {"item_id": item_id}

在这个例子中,q 是一个可选的查询参数。如果用户在访问 /items/foo?q=bar,服务器返回的响应将包含 q 参数的值:

{"item_id": "foo", "q": "bar"}

如果不传递查询参数,则返回的结果不包含 q

{"item_id": "foo"}

5、查询参数类型转换

FastAPI 能够自动地将查询参数转换为指定的类型。例如,如果我们声明一个布尔类型的查询参数,FastAPI 会将传入的参数值自动转换为布尔值:

from typing import Union

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Union[str, None] = None, short: bool = False):
    item = {"item_id": item_id}
    if q:
        item.update({"q": q})
    if not short:
        item.update({"description": "This is an amazing item with a long description"})
    return item

在这个例子中,short 参数是一个布尔类型。如果我们访问 http://127.0.0.1:8000/items/foo?short=1http://127.0.0.1:8000/items/foo?short=true,FastAPI 会自动将 short 的值转换为 True,返回的响应将不包含 description 字段。而如果不传递 short 或传递 short=false,返回的响应将包含完整描述。

FastAPI 支持多种布尔值的变体,如 1, True, on, yes 等,它们都可以被识别为 True,而 0, False, off, no 则被识别为 False


6、额外的校验

FastAPI 允许对查询参数进行额外的校验,例如限制参数的最大长度、最小长度或添加正则表达式校验。

6-1、使用 Query 进行校验

在以下示例中,我们使用 Query 函数来添加对 q 参数的额外校验,要求 q 的最大长度为 50 个字符:

from typing import Union

from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None, max_length=50)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

在这个例子中,如果用户提供的查询参数 q 超过 50 个字符,FastAPI 将自动返回一个错误响应,提示用户输入的内容不符合要求。


7、总结

本文详细介绍了如何安装和验证 FastAPI,同时介绍了 FastAPI 的基本使用方法,包括路径参数、查询参数、类型转换和参数校验等内容。通过这些基础知识,开发者可以快速构建高效、现代的 Web API。此外,FastAPI 还提供了自动生成的交互式文档,大大提高了开发体验。

FastAPI 的亮点不仅在于性能和简洁性,它还利用了 Python 的类型提示特性,使代码更加可读、易于维护。通过集成 ASGI 服务器(如 Uvicorn),FastAPI 可以处理高并发请求,适用于构建现代化的异步 Web 应用。

随着 Fast

API 社区的不断发展,它已经成为了构建现代 Web API 的一大利器。

你可能感兴趣的:(Python,FastAPI,fastapi,python,深度学习,1024程序员节)