1. 什么是FastAPI

FastAPI 是一个基于 Python 的高性能 Web 框架,专门用于快速构建 API 接口服务

1.1 FastAPI 特点

  • 高性能: 基于Starlette和Pydantic,利用异步(asynchronous)编程,提供出色的性能。
  • 自动文档生成: 自动生成交互式API文档,支持Swagger UI和ReDoc,让API的理解和测试更加直观。
  • 类型注解支持: 利用Python的类型提示,提供更严格的输入验证和更好的代码提示。
  • 异步支持: 支持异步请求处理,使得处理IO密集型任务更加高效。

1.2 FastAPI 适用场景

  • 构建API后端: 用于构建RESTful API,支持前后端分离的Web应用。
  • 微服务架构: 可以作为微服务的后端框架,支持快速开发和部署。
  • 数据处理API: 适用于处理数据,接收和返回JSON数据。
  • 实时通信: 支持WebSocket,适用于实时通信场景。

1.3 为什么选择 FastAPI?

  • Pythonic: 使用Python的自然语法和类型提示,降低学习曲线。
  • 性能优越: 利用异步编程和底层的Starlette框架,提供卓越的性能。
  • 文档友好: 自动生成交互式文档,减少文档维护的工作量。
  • 生态系统: 基于Python生态系统,可以方便地集成各种库和工具。

2. 使用 FastAPI 框架搭建 Web 服务

2.1 创建项目

FastAPI → 存储位置及项目名称 → 创建虚拟环境 → Create

2.2 创建一个main.py文件

from fastapi import FastAPI

app = FastAPI()

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

在命令行中运行以下命令以启动应用:

uvicorn main:app --reload

代码解析:

  • from fastapi import FastAPI: 这行代码从< code>fastapi 模块中导入了 FastAPI 类。FastAPI 类是 FastAPI 框架的核心,用于创建 FastAPI 应用程序实例。

  • app = FastAPI():这行代码创建了一个 FastAPI 应用实例。与 Flask 不同,FastAPI 不需要传递 __name__ 参数,因为它默认使用当前模块。

  • @app.get("/"): 这是一个装饰器,用于告诉 FastAPI 哪个 URL 应该触发下面的函数,并且指定了 HTTP 方法为 GET。在这个例子中,它指定了根 URL(即网站的主页)。

  • def read_root():: 这是定义了一个名为 read_root 的函数,它将被调用当用户使用 GET 方法访问根 URL 时。

  • return {"Hello": "World"}: 这行代码是 read_root 函数的返回值。当用户使用 GET 方法访问根 URL 时,这个 JSON 对象将被发送回用户的浏览器或 API 客户端。

2.3 访问项目

打开浏览器并访问 http://127.0.0.1:8000,你应该能够看到 FastAPI 自动生成的交互式文档,并在根路径 ("/") 返回的 JSON 响应。

2.4 路由

路由就是URL地址和处理函数之间的映射关系,它决定了当用户访问某个特定网址时,服务器应该执行哪段代码来返回结果。
FastAPI的路由定义基于Python的装饰器模式

2.5 参数分类

2.5.1 路径参数

路径参数 - 类型注解 Path
FastAPI 允许为参数声明额外的信息和校验,导入 FastAPI 的 Path 函数

2.5.2 查询参数

声明的参数不是路径参数时,路径操作函数会把该参数自动解释为查询参数

查询参数 - 类型注解 Query
导入 FastAPI 的 Query 函数

2.5.3 请求体参数

请求体参数 - 类型注解 Field
导入 pydantic 的 Field 函数

2.6 响应类型

默认情况下,FastAPI 会自动将路径操作函数返回的 Python 对象(字典、列表、Pydantic 模型等),经由 jsonable_encoder 转换为JSON 兼容格式,并包装为 JSONResponse 返回。这省去了手动序列化的步骤,让开发者能更专注于业务逻辑。
如果需要返回非 JSON 数据(如 HTML、文件流),FastAPI 提供了丰富的响应类型来返回不同数据

2.6.1 响应HTML格式

2.6.2 响应文件格式

2.6.3 自定义响应数据格式

2.7 异常处理

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐