Fast API 教程:创建 API 的框架

2025年3月17日 | 阅读 7 分钟

在本教程中,我们将学习 FastAPI 框架以及如何创建 REST API。我们将了解 FastAPI 为何如此受欢迎,以及它与其他现有框架有何不同。我们还将讨论如何快速创建默认实现最佳实践的 Web API。通过本教程的学习,我们将能够开始创建生产就绪的 Web API,并能够针对特定用例进行深入研究。我们假设您熟悉 HTTP 及其工作原理、JSON 和 Python 基础知识。那么,让我们开始介绍 FastAPI。

什么是 FastAPI?

FastAPI 是一个流行、现代、高性能的 Web 框架,用于创建 Web 服务或 API。它是一个基于 Python 的框架,带有标准类型提示。REST 是一组规则,概述了客户端和服务器之间共享数据的最佳实践。顾名思义,由于其开箱即用地支持 Python 3.6+ 的异步特性,它速度很快。

该框架于 2018 年发布,由 Sebastián Ramírez 创建。创建这个项目的一个有趣原因是他对当时可用的框架(如 Flask 和 DRF)不满意,因此他使用 Starlette 和 Pydantic 等工具创建了自己的框架。

现在,FastAPI 在行业中非常流行和抢手,甚至像 Uber、Netflix 和 Microsoft 这样的大型科技公司也在使用 FastAPI 来构建他们的应用程序。

FastAPI 功能

FastAPI 提供了许多优于当前可用框架的功能。这些功能如下所示。

  • 高性能 - FastAPI 速度非常快。它被认为是目前最快的框架之一。它与 NodeJS 和 Go 以及 Starlette 和 Pydantic 相当。
  • 快速编码 - 它显着提高了开发速度。
  • 健壮性 - 它拥有完善的文档,我们可以通过阅读其文档自行创建生产就绪的 API。
  • 直观 - 它的设计旨在让每个人都能轻松理解、易于使用并提供出色的编辑器支持。
  • 更少的错误 - 它减少了大约 40% 的诱发错误。
  • 插件 - 它提供了使用依赖注入创建插件的功能。
  • 类型提示 - 我们可以使用类型提示进行数据验证和转换。
  • 基于标准 - 它基于 API、OpenAPI 和 JSON Schema 的开放标准。
  • 直观明了 - 它直观明了,因此我们可以花更少的时间阅读文档。

Flask 与 FastAPI

现在,我们将看看 Flask 与 FastAPI 有何不同。Flask 是一个带有 ORM、缓存和身份验证的 Python 微框架。它旨在使用 Python 构建 Web 应用程序,并且旨在非常简单、快速和可靠。尽管拥有这些功能,我们为什么还需要使用 FastAPI 呢?让我们了解以下优缺点。

优点

  • Flask 灵活多变;我们可以操作它的大部分方面。
  • Flask 易于学习,对初学者友好。
  • 内置功能及其集成支持,可以实现无缝单元测试。

缺点

  • 它不附带数据验证。因此这可能经常导致程序崩溃。
  • 它有一个单一的源按顺序处理请求,这意味着请求可能需要一些时间才能被处理。

用例

Flask API 最适合以下类型的项目 -

  • 社交网络
  • 社交媒体机器人
  • 电子商务系统
  • 静态网站

现在让我们看看 FastAPI。

FastAPI

FastAPI 是一个现代、高效、高性能的 Web 框架,用于构建 Web API。

优点

  • FastAPI 附带数据验证。它甚至可以在嵌套的 JSON 请求中验证数据类型。
  • 用户可以轻松处理异常。
  • 它支持使用 async/await Python 关键字的异步代码。

缺点

  • 正如我们之前提到的,FastAPI 是使用 Pydantic 创建的,并用作请求验证。有时用户需要编写自己的自定义验证器。
  • 由于它是市场上的一个新框架,因此其社区比其他 Web 框架小。

用例

它通常用于 -

  • 内部危机管理。
  • 它用于部署机器学习模型。
  • 为 Web 应用程序创建账户、登录和身份验证。

FastAPI 入门

理论讲得够多了,现在是时候实践一下,用 FastAPI 编写“Hello World”API 了。在本节中,我们将创建一个最简单的 FastAPI 应用程序。但在那之前,我们需要在我们的系统中安装它。与任何其他 Python 项目一样,最好从创建虚拟环境开始。创建虚拟环境并激活它。

第一步是使用 pip 安装 FastAPI 和 Uvicorn。

安装完成后,我们就可以学习如何使用它们了。FastAPI 是我们将用来创建 API 的框架,而 Uvicorn 是将使用我们构建的 API 来处理服务器请求的服务器。

注意 - 如果您在使用上述命令时遇到问题,您可以单独安装它们,如下所示。

并且

创建第一个 API

现在我们将创建一个显示“Hello World”消息的 API,并使用 Uvicorn 服务器运行它。我们还将解释其内部原理。

创建 main.py 文件并将上述代码粘贴到其中。现在我们有一个功能齐全的 API 应用程序,其中包含一些最佳实践。如果我们直接使用 Python 调用它,代码将无法自行运行。我们需要一个服务器程序来运行它。我们已经安装了 uvicorn,它是我们的服务器。

使用 Uvicorn 运行应用程序

使用 uvicorn 运行实时服务器。

我们已经突出显示了我们的应用程序在本地机器上提供服务的 URL。

检查响应

当我们在浏览器中打开 http://127.0.0.1:8000 时,它将发送如下 JSON 响应。

现在让我们分解一下代码 -

  • uvicorn - 它是一个服务器库。
  • main - 它指的是文件名。
  • app - 它指的是在 main.py 文件中创建的 FastAPI 对象。
  • --reload - 这是一个参数,它使服务器在代码更改后重新启动。

现在让我们分解 main.py 代码。

第 1 行:首先我们导入 FastAPI 类,它提供了 API 的所有功能。

第 3 行:我们初始化 FastAPI 类并将其命名为 app。它指的是上述命令中的 uvicorn

第 5 行:我们创建一个 GET 路径。

第 6 行:我们创建一个异步函数,当用户访问该路径时执行。

第 7 行:每当访问该路由时,我们都会向客户端返回一个响应。

路径参数

我们可以通过路径传递参数,并在函数中使用 Python 数据声明其类型。借助路径参数,我们无需构建正文来查找资源,它有助于将 API 调用范围缩小到单个资源。这些参数用大括号 {} 括起来,它们提供了一种控制特定资源表示方式的方法。让我们看下面的例子。

示例 -

我们使用路径参数值 student_id,它将作为参数 student_id 传递。

数据转换

当我们运行上述 API 并访问 http://127.0.0.1:8000/students/4 时,我们将得到以下响应。

{'student_id': 4}

函数接收并返回的是 4,这是一个整数,而不是字符串(“3”)。因此,类型声明有助于自动请求解析。

查询参数

查询参数是可选的。如果我们是在 API 函数中而不是在路径中传递参数,则它们会自动解释为查询参数。

让我们来理解以下代码。

示例 -

查询是问号后设置的键值对。在 URL 中,并用 & 符号分隔。

https://:8000/courses/?start=0&end=10

start 的值为 0,end 的值为 10,是查询参数。

请求正文

请求正文是用于将数据从客户端发送到 API 的 JSON 数据。API 几乎总是必须发送响应正文。但客户端并非总是必须发送响应正文。有三种最常见的数据发送方法——put、patch 或 delete。我们也可以使用 GET 发送数据,但不建议这样做。

在 FastAPI 中,我们使用 Pydantic 模型来声明请求正文。Pydantic 工具提供了所有优点和方法。

首先,我们需要从 pydantic 导入 BaseModel,然后使用它来创建子类,定义我们希望接收的模式或数据形状。

让我们理解下面的例子。

示例 -

当我们运行 API 并导航到 http://127.0.0.1:8000/docs 时,它会给我们显示以下页面。

Fast API Tutorial: A Framework to Create APIs

让我们分解一下上面的代码 -

  • 首先,我们导入所需的包。
  • 我们声明了一个继承 BaseModel 类的子类 Student。
  • 在类中,我们定义了数据的模式。
  • 我们创建了一个 FastAPI 类的实例。
  • 我们创建了一个 POST 路径。
  • 我们将请求数据模型添加到路径中。

结论

在本教程中,我们学习了 FastAPI 及其基本概念。我们已经了解了如何创建生产就绪的 API。我们简要介绍了 FastAPI 以及它与 Flask 的不同之处。我们学习了如何使用路径参数为每个项目获取唯一的 URL 路径,以及如何使用 Pydantic 在请求中接收 JSON 数据。除此之外,FastAPI 还有许多功能,我们将在即将到来的教程中探索。但是,您可以开始创建自己的高性能 API。