从开发到部署:使用 FastAPI 和 Docker 构建可扩展的 Python Web API

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。

在之前的文章中,我们介绍了如何使用《FastAPI + NGINX + Gunicorn:一步一步教你部署一个高性能的Python网页应用》,并将其部署到服务器上。这个过程中,我们学习了如何使用 FastAPI 框架来构建 Web API,以及如何使用 NGINX 和 Gunicorn 来部署这个应用程序。但是,Web API 的应用场景不仅仅局限于网页应用程序,它也可以用于构建各种类型的应用程序,包括机器学习应用程序、移动应用程序等等。

在今天的文章中,我们将重点介绍 FastAPI 的开发和部署。我们将学习如何使用 FastAPI 框架来构建 Python Web API,并将其容器化为 Docker 镜像部署运行。本文将提供一步一步的指导,帮助您快速入门 FastAPI 框架,并掌握如何将其应用于 Python Web API 的开发和部署。如果您是 Python 开发新手,本文可能会为您提供一些参考,对于FastAPI 框架还有很多高级的内容将在后续逐渐展开介绍。

一、FastAPI 简介

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.7+ 构建 API。

FastAPI 可简化使用 Python 编程创建 Web API 的过程。它允许开发人员快速轻松地构建 API,确保最佳性能和轻松管理,而不会影响代码质量和效率。它提供了许多优势,包括卓越的速度(基于 Starlette,使用 ASGI)、优于其他几个 Python 后端框架以及与 Express.js 等流行框架竞争。

它具有以下主要特点:

  • 快速:非常高的性能,与 NodeJS 和 Go 相当(感谢 StarlettePydantic)。可用的最快的 Python 框架之一。

  • 快速编码:将开发功能的速度提高约 200% 到 300%。

  • 更少的错误:减少约 40% 的人为(开发人员)引起的错误。

  • 直观:强大的编辑器支持。到处都完成。调试时间更少。

  • 简单:旨在易于使用和学习。阅读文档的时间更少。

  • 简而言之:最大限度地减少代码重复。每个参数声明具有多个功能。更少的错误。

  • 健壮:获取可用于生产的代码。具有自动交互式文档。

  • 基于标准:基于(并完全兼容)API 开放标准:OpenAPI(以前称为 Swagger)和 JSON Schema。

1.1、为什么选择 FastAPI

之所以选择 FastAPI 来创建API。除了其性能不错,运行快速之外,它不需要进行大量的设置和配置,即可快速构建 API。 FastAPI 支持直接生成 OpenAPI 规范文档,无需花费精力安装额外的库来生成 Flask 或 Django 的 OpenAPI 文档。

我认为 FastAPI 是在 Python 中构建 API 的原因是:

  • 性能:FastAPI 通过充分利用关键库和工具(例如 Pydantic 和 ASGI 生态系统)来最大限度地提高性能。此外,由于其基于 Starlette 框架,所以无缝集成了异步/等待功能的强大功能。

  • 可扩展性:FastAPI 的模块化和简单性允许与负载均衡器无缝集成,促进可扩展性并确保高效的资源利用。

  • 自动文档:通过要求各种 FastAPI 组件的显式定义,Pydantic 的集成允许 FastAPI 能够自动生成其 API 文档。 FastAPI 提供 Swagger API 文档。

  • 易用性:FastAPI是一个Python框架,因此继承了使用Python的好处。不仅如此,FastAPI 使创建服务器和构建端点变得简单快捷。

  • 请求验证:FastAPI 提供请求验证以及用户可读的更详细的错误消息。这也归因于它使用 Pydantic 来进行请求数据类型规范。

1.2、FastAPI 与其他 Python 框架的比较

FastAPI与其他Python框架(如Flask、Django和Pyramid)相比有以下特点:

  1. 性能:FastAPI以其卓越的性能而脱颖而出。它使用现代Python技术,如异步编程和类型注解,以实现高速的请求处理和响应。

  2. 类型注解和自动文档生成:FastAPI支持使用类型注解来定义API的输入和输出,并可以根据这些注解自动生成清晰易懂的文档。这使得开发人员能够更好地理解API的结构和功能。

  3. 异步支持:FastAPI基于Starlette框架,充分利用了异步编程的优势。它可以处理大量并发请求,并具有出色的性能表现。

  4. 生产力和易用性:FastAPI提供简单直观的API设计,具有清晰的文档和广泛的示例。它还附带了一些预构建的工具,如自动文档生成,以提高开发人员的生产力。

  5. 生态系统:尽管FastAPI相对较新,但它的生态系统正在迅速发展。它可以与其他Python库和工具无缝集成,为开发人员提供更多选择和灵活性。

综上所述,FastAPI在性能、类型注解、自动文档生成、异步支持和生产力方面与其他Python框架相比具有独特的优势。对于需要高性能和易用性的应用程序开发,FastAPI是一个值得考虑的选择。

1.2.1、Django 与 FastAPI

Django和FastAPI是两个不同的Python后端框架,各自有其特点和适用场景。

Django是一个功能丰富的框架,拥有强大的内置库和功能。它提供了ORM(对象关系映射)工具、身份验证机制和路由功能等,使得开发复杂的Web应用程序变得更加容易。Django还有一个庞大的生态系统,可以满足各种项目需求。

FastAPI则是一个轻量级的微框架,专注于高性能和灵活性。虽然FastAPI缺乏像Django那样的完整生态系统,但它以其快速的处理速度而脱颖而出。FastAPI使用现代Python技术,如异步编程和类型注解,来提高性能和效率。

因此,选择使用Django还是FastAPI取决于项目的需求和优先考虑的方面。如果需要开发复杂的Web应用程序,并且需要全面的功能和生态系统支持,那么Django可能是更好的选择。而如果对性能和灵活性有较高的要求,且项目规模相对较小,那么FastAPI可能更适合。

1.2.2、Flask 与 FastAPI

Flask是一个轻量级的框架,旨在快速构建Web应用程序。它提供了简洁而灵活的设计,为开发人员提供更多的控制权和灵活性。Flask允许开发人员根据他们的具体需求或要求来定制应用程序,使得开发过程更加自由和定制化。

FastAPI则专注于以卓越的速度开发高性能和可扩展的应用程序。它使用现代Python技术,如异步编程和类型注解,以实现快速的请求处理和响应。FastAPI适用于需要处理大量并发请求和对性能有较高要求的复杂应用程序。

因此,选择使用Flask还是FastAPI取决于项目的需求和优先考虑的方面。如果你需要一个轻量级的框架,注重灵活性和定制化,并且对性能要求相对较低,那么Flask可能是更好的选择。而如果你需要一个高性能、可扩展的框架,对性能要求较高,那么FastAPI可能更适合。

1.2.3、Pyramid Vs FastAPI

Pyramid是Python最受欢迎的后端框架之一,它采用了“仅使用您需要的”理念。这意味着Pyramid提供了一个简约的核心,可以通过各种附加组件和库进行扩展。开发人员可以根据自己的需求选择和定制所需的组件,从而形成一个轻量级且高度可定制的框架。这种模块化的设计使得Pyramid非常灵活,能够满足各种特定的用例需求。

FastAPI则更注重开发人员的生产力和易用性。它具有简单直观的API设计,清晰的文档和广泛的示例。FastAPI还提供了一些预构建的工具,例如自动生成API文档。这些功能使得开发人员能够快速上手并提高开发效率。

因此,选择使用Pyramid还是FastAPI取决于项目的需求和优先考虑的方面。如果你需要一个高度可定制的框架,希望能够选择和定制所需的组件,那么Pyramid可能是更好的选择。而如果你注重开发人员的生产力和易用性,并且需要快速上手和高效开发的框架,那么FastAPI可能更适合。

二、FastAPI 安装

在安装 FastAPI 之前,使用 virtualenv 在新创建的目录中创建一个新的虚拟环境。

如果您尚未安装 virtualenv

pip install virtualenv

创建一个新的 env 虚拟环境。

virtualenv env

如果使用的是 Mac/Linux,您可以使用以下命令激活虚拟环境,Windows 用户可以运行此命令:

source ./env/bin/activate

最后,您已准备好安装 FastAPI,请运行以下命令:

pip install fastapi

由于 FastAPI 没有内置服务,因此您需要安装 uvicorn 才能运行。 uvicorn 是一个 ASGI 服务器,它允许我们使用异步/等待功能,使用命令安装 uvicorn

pip install "uvicorn[standard]"

三、FastAPI 开发

3.1、使用 FastAPI 创建 API

一旦你安装了这些库。使用以下内容创建一个名为 main.py 的新 python 文件:

# main.py

from typing import Union
from fastapi import FastAPI

app = FastAPI()

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

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

在这里,首先导入并实例化 FastAPI,然后注册根端点 / ,然后返回 JSON

  • 第 1 步导入 FastAPIFastAPI 是一个 Python 类,为您的 API 提供所有功能。

  • 第 2 步是创建一个 FastAPI 实例,这里的 app 变量将是类 FastAPI 的实例。这将是创建 API 的主要交互点。此 app 与您在上面使用 uvicorn 运行实时服务器的命令中提到的相同。

在继续步骤 3 之前,这里先解释几个术语。

1)、路径是指从第一个正斜杠字符 ( / ) 开始的 URL 的最后部分。因此,在 https://example.com/items/foo 这样的 URL 中,路径将为 /items/foo 。路径通常也称为端点或路由,但本教程中将使用术语路径。当您构建 API 时,路径是分离资源的主要方式。

2)、另一个需要了解的重要术语是操作,它用于引用任何 HTTP 请求方法:POST、GET、PUT、DELETE、OPTIONS、HEAD、PATCH、TRACE

通过 HTTP,你可以使用其中一个(或多个)操作与每个路径进行通信。了解这两个术语的含义后,您就可以继续第三步了。

  • 第3步是定义路径操作装饰器,@app.get("/") 告诉 FastAPI 下面的函数负责处理使用 get 操作发送到路径 / 的请求。这是一个与路径操作相关的装饰器,或者说路径操作装饰器。如果您想了解有关装饰器的更多信息,请查看 Python 装饰器入门。

您还可以使用上面提到的其他操作:

  • @app.post()

  • @app.put()

  • @app.delete()

  • @app.options()

  • @app.head()

  • @app.patch()

  • @app.trace()

在每种情况下,你都可以在负责处理这些请求的函数上方使用适当的路径操作装饰器。

  • 第四步是定义路径操作函数,或者路径操作装饰器下面的函数。

每当 FastAPI 使用 GET 操作接收到对指定 URL ( / ) 的请求时,都会调用此函数。在本例中,它是一个 async 函数。你还可以将其定义为普通函数,而不是使用 async def

如果您不知道普通函数和 async 函数之间的区别以及何时使用它们,请查看 FastAPI 文档中的并发和 async/await。

  • 第五步,返回内容:你可以将字典、列表或异常值返回为字符串、整数等。您还可以返回 pydantic 模型。还有许多其他对象和模型将自动转换为 JSON,包括对象关系映射器 (ORM) 等。

3.2、运行服务器

使用以下命令运行服务器:

uvicorn main:app --reload --host 0.0.0.0

这里 app.main 表示您使用 app 目录中的 main.py 文件, :app 表示我们的 FastAPI 实例名称。

启动完成后,可以在浏览器中输入 http://127.0.0.1:8000 访问该应用程序,它将发送包含以下内容的 JSON 响应:

{"message":"Hello World"}

该 JSON 消息与您从应用程序中的函数返回的字典相同。 FastAPI 负责将 Python dict 序列化为 JSON 对象并设置适当的 Content-Type

3.3、路径参数:通过ID获取项目

可以使用与 Python 格式字符串相同的语法来声明路径参数或变量:

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

路径参数 item_id 的值将作为参数 item_id 传递给您的函数。

因此,如果您运行此示例并转到 http://127.0.0.1:8000/items/foo ,您将看到以下响应:

{"item_id":"foo"}

响应包含 "foo" ,它是在 item_id 路径参数中传递的内容,然后在字典中返回。

3.4、带类型的路径参数

可以使用标准 Python 类型提示在函数中声明路径参数的类型:

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

item_id 声明为 int,声明路径参数的类型将为您提供函数内部的编辑器支持,包括错误检查、完成等。

因此,如果您运行此示例并转到 http://127.0.0.1:8000/items/5?q=somequery ,您将看到以下响应:

{"item_id":5,"q":"somequery"}

响应包含 "foo" ,它是在 item_id 路径参数中传递的内容,然后在字典中返回。

3.5、数据转换

从上面的请求中,我们定义的函数接收并返回的值是 5 ,它是 Python int ,而不是字符串 ( "5" )。因此,通过该类型声明,FastAPI 可以为您提供自动请求解析。

3.6、数据验证

如果你将浏览器指向 http://127.0.0.1:8000/items/foo ,那么你会看到一个很好的 HTTP 错误:

{
        "detail": [{
                "type": "int_parsing",
                "loc": ["path", "item_id"],
                "msg": "Input should be a valid integer, unable to parse string as an integer",
                "input": "foo",
                "url": "https://errors.pydantic.dev/2.3/v/int_parsing"
        }]
}

这是因为路径参数 item_id 的值为 "foo" ,而不是 int

如果提供 float 而不是 int ,例如在浏览器中打开 http://127.0.0.1:8000/items/1.2 ,也会出现相同的错误。因此,通过相同的 Python 类型提示,FastAPI 为您提供数据解析和数据验证。

另请注意,该错误清楚地指出了验证未通过的确切点。这在开发和调试与 API 交互的代码时非常有用。

3.7、交互式 API 文档

要访问应用自动交互的API文档(由Swagger UI提供),请访问 http://127.0.0.1:8000/docs。您可以从浏览器本身使用您的 API 并与之交互。

同样,通过相同的 Python 类型声明,FastAPI 为您提供集成 Swagger UI 的自动交互式文档。请注意,路径参数被声明为整数。

3.8、替代 API 文档

由于 FastAPI 构建于 OpenAPI 标准之上,因此它还使用 ReDoc 提供替代 API 文档,您可以通过 http://127.0.0.1:8000/redoc 访问该文档:

还有许多其他兼容工具,包括许多语言的代码生成工具。

3.9、使用 pydantic 进行数据处理

所有数据验证都是由 pydantic 在后台执行的,你可以对 strfloatbool 和许多其他复杂数据类型使用相同的类型声明。

3.10、顺序很重要:将固定路径放在第一位

创建路径操作时,你可能会发现有固定路径的情况,例如 /users/me 。假设它是为了获取有关当前用户的数据。你可能还拥有路径 /users/{user_id} 来通过某个用户 ID 获取有关特定用户的数据。

由于路径操作是按顺序计算的,因此你需要确保 /users/me 的路径在 /users/{user_id} 的路径之前声明:

# main.py

from fastapi import FastAPI
app = FastAPI()

@app.get("/users/me")
async def read_user_me():
    return {"user_id": "the current user"}

@app.get("/users/{user_id}")
async def read_user(user_id: str):    
    return {"user_id": user_id}

否则, /users/{user_id} 的路径也会匹配 /users/me ,认为它正在接收值为 "me" 的参数 user_id

3.11、请求正文:接收 JSON 数据

当客户端需要将数据发送到API时,可以将数据作为请求正文发送。请求正文是客户端发送给API的数据。而响应正文则是API发送给客户端的数据。在大多数情况下,API都需要发送响应正文给客户端,但是客户端并不一定需要始终发送请求正文。

3.12、使用 pydantic 声明 JSON 数据模型

首先,您需要从 pydantic 导入 BaseModel ,然后使用它来创建定义您想要接收的架构或数据形状的子类。

接下来,将数据模型声明为继承自 BaseModel 的类,对所有属性使用标准 Python 类型:

# main.py

from typing import Optional
from fastapi import FastAPI

from pydantic import BaseModel

class Item(BaseModel):    
    name: str    
    description: Optional[str] = None    
    price: float    
    tax: Optional[float] = None

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    return item

当模型属性具有默认值时,则不需要它。否则是需要的。要使属性可选,您可以使用 None

例如,上面的模型声明一个 JSON 对象(或 Python dict ),如下所示:

{
    "name": "Jack",
    "description": "可选属性",
    "price": 19.8,
    "tax": 2.2
}

在本例中,由于 descriptiontax 是可选的,因为它们具有默认值 None ,因此此 JSON 对象也将有效:

{
    "name": "Jack",
    "price": 19.8
}

省略默认值的 JSON 对象也是有效的。接下来,将新的 pydantic 模型作为参数添加到路径操作中。可以按照声明路径参数的方式声明它:

# main.py

from typing import Optional
from fastapi import FastAPI

from pydantic import BaseModel

class Item(BaseModel):    
    name: str    
    description: Optional[str] = None    
    price: float    
    tax: Optional[float] = None

app = FastAPI()

@app.post("/items/")
async def create_item(item: Item):
    return item

参数 item 具有 Item 类型提示,这意味着 item 被声明为类 Item 的实例。

通过该 Python 类型声明,FastAPI 将:

  • 以 JSON 形式读取请求正文

  • 如果需要转换对应的类型

  • 验证数据,如果无效则返回明确的错误

  • 在参数 item 中提供接收到的数据 - 由于您将其声明为 Item 类型,因此您还将获得所有编辑器支持,并对所有属性进行完成和类型检查以及它们的类型

  • 为您的模型生成 JSON 架构定义,您还可以在对您的项目有意义的任何其他地方使用该定义

通过将标准类型提示与 pydantic 结合使用,FastAPI 可以帮助您轻松构建默认具有所有这些最佳实践的 API。

3.13、使用 pydantic 自动记录

pydantic 模型的 JSON 模式将成为为您的应用程序生成的 OpenAPI 的一部分,并将显示在交互式 API 文档中:

您可以看到 API 文档中 Item 的属性与您在 pydantic 模型中声明的属性完全相同。

四、Docker 部署 FastAPI 服务

4.1、安装 Docker Engine

1、更新系统软件包列表:

sudo apt update

2、安装Docker依赖的软件包:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

3、添加Docker官方的GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4、添加Docker的软件源:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5、更新软件包列表:

sudo apt update

6、安装Docker Engine:

sudo apt install docker-ce docker-ce-cli containerd.io

7、验证Docker是否正确安装:

sudo docker run hello-world

4.2、创建 Docker 文件

在项目的根目录下创建一个 Dockerfile 文件。

├── Dockerfile
├── app
   ├── main.py
   ├── api.py

Docker 层构成了 Docker 镜像和 Docker 容器的文件系统。每一层都对应于 Dockerfile 中的某些指令。我们根据项目依赖和目录定义的Dockerfile文件内容如下:

FROM tiangolo/uvicorn-gunicorn:python3.10

LABEL maintainer="FrenzyTechAI <crossme0809@gmail.com>"

RUN pip install --no-cache-dir --upgrade --timeout 10000 fastapi uvicorn

WORKDIR /app

COPY ./app /app

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

4.3、创建 Docker 镜像

Docker 映像包含应用程序代码、库、工具、依赖项以及应用程序运行所需的其他文件。

docker build -t fastapi-test-app:new --network=host .

注意:如果在构建 Docker 容器的时候执行到 pip install 安装依赖的时候出错,出现如下无法连接网络的问题,是因为在Docker容器内部无法连接宿主机网络,需要在docker命令后增加 --network=host 参数使用主机网络运行构建Docker容器。

Collecting pytest
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7feb52c30630>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)': /simple/pytest/

此输出显示创建 docker 映像时使用的过程。

列出我们创建的所有镜像

要列出之前创建的所有 docker 映像,可以使用以下命令。

docker image ls

输出结果:

(base) root@hecs-275553:/opt/fastapi# docker image ls                                                                                            
REPOSITORY                   TAG             IMAGE ID       CREATED          SIZE                                                                
fastapi-test-app             new             1ea9708114e7   55 seconds ago   1.05GB
danswer/danswer-web-server   latest          24e5b346cad5   2 weeks ago      231MB
qdrant/qdrant                v1.3.0          2de9d6b3de91   2 months ago     139MB
hello-world                  latest          9c7a54a9a43c   3 months ago     13.3kB
typesense/typesense          0.24.1          de9eadc78acf   4 months ago     799MB
postgres                     15.2-alpine     ddc12ac7fa27   5 months ago     243MB
nginx                        1.23.4-alpine   8e75cbc5b25c   5 months ago     41MB

我们最新的镜像是 fastapi-test-app 。这是您刚刚创建的 id 为 1ea9708114e7 的镜像。

4.4、创建docker容器

Docker 容器是 Docker 镜像的实时运行实例,用户可以与它们交互,管理员可以使用 docker 命令调整其设置和条件。

docker run --network=host -p 8000:8000 fastapi-test-app:new

输出结果:

(base) root@hecs-275553:/opt/fastapi# docker run --network=host -p 8000:8000 fastapi-test-app:new
WARNING: Published ports are discarded when using host network mode
INFO:     Will watch for changes in these directories: ['/app']
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [1] using WatchFiles
INFO:     Started server process [9]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

Docker容器启动完成后,可以在浏览器中输入 http://127.0.0.1:8000 访问该应用程序。

五、使用 PyCharm 开发 FastAPI 服务

FastAPI 是一个用于使用 Python 构建 API 的 Web 框架。需要 Python 3.7 及以上版本。 PyCharm Professional 为开发 FastAPI 应用程序提供以下支持:

  • 具体项目类型

  • 编码协助

  • 运行/调试配置

PyCharm Professional 下载地址:https://www.jetbrains.com/pycharm/download/

5.1、创建FastAPI项目

1、从主菜单中,选择文件|新建项目,或单击欢迎屏幕中的新建项目按钮。新项目对话框打开。

2、在[New Project]对话框中,执行以下操作:

  • 指定项目类型 FastAPI

  • 位置:保留建议的项目位置或指定替代目录

  • 接下来,通过单击相应的单选按钮来选择是要创建新环境还是使用现有解释器。

  • 在[Location]字段中指定新 Virtualenv 环境的位置,或单击 📁 并浏览文件系统中的所需位置。新 Virtualenv 环境的目录应该为空。默认在项目文件的根目录。

  • 从列表中选择 Python 版本。

  • 通常,PyCharm 会检测 Virtualenv 安装。否则,请指定 Virtualenv 可执行文件的位置.

  • 如果您想在 PyCharm 中创建 Python 解释器时重用此环境,请选中 [Make available to all projects] 复选框。

3、单击[Create]后,PyCharm 将创建一个 Python 环境并安装 fastapi 和 uvicorn 包。它还添加了 main.py 和 test_main.http 文件以及一些默认代码结构。

5.2、使用编码辅助来开发应用程序

开发 FastAPI 应用程序时,您可以受益于 IDE 中提供的编码帮助。

1、使用检查来分析代码问题。您可以使用检查小部件来简要预览问题的摘要。单击小部件可获取有关[Problem]工具窗口中每个检测到的问题的更多信息。

2、可以使用上下文感知代码完成来加速编码过程。只需开始输入代码构造,就会出现完成弹出窗口。您还可以按 ⌃Ctrl Space 显示可用项目。

5.3、启动和修改运行/调试配置

1、创建新项目后,PyCharm 会为您提供运行/调试配置,以便您可以执行 FastAPI 应用程序。在可用运行/调试配置列表中选择创建的配置。单击“Run”以启动您的应用程序。

目标应用程序在运行工具窗口中执行。您可以单击链接在浏览器中预览应用程序。

2、您可以修改使用项目创建的默认运行/调试配置。从可用配置列表中选择编辑配置...:

在左侧窗格中选择目标配置并修改其参数,例如,您可以添加更多 uvicorn 选项(在此示例中: --reload delay 10 )。

3、你还可以执行 .http 文件来测试 GET 请求。您可以单独运行每个请求,也可以单击 .http 文件工具栏上的绿色按钮来一次测试所有请求。

选择一个选项以在没有环境的情况下执行请求,或者在公共或私有文件中创建环境。PyCharm 在“Services”工具窗口中执行 GET 测试。您可以选择特定请求来预览其执行状态的摘要。

5.4、管理Endpoints

在 PyCharm 中,可以很方便的预览、修改、创建和测试 FastAPI 应用程序的端点。

选择 View | Tool Windows | Endpoints 打开 Endpoints 工具窗口,Endpoints 工具窗口包含应用程序中定义的端点列表。专用窗格显示所选端点的详细信息,包括文档、生成的 HTTP 请求和生成的 OpenAPI 规范。

双击端点列表中的任意项目可导航到 .py 文件中的相应方法。你还可以右键单击列表中的任何项目以获取上下文菜单,其中包含导航到源代码、查找用法、在 HTTP 客户端中生成请求或导出 OpenAPI 规范草案的选项。

您可以在编辑器的单独选项卡中预览 HTTP 客户端。单击[Open in Editor],PyCharm 将使用 HTTP 请求打开一个临时草稿文件。您可以点击装订线中的绿色按钮来测试它。

六、总结

FastAPI 是一个现代、高性能的 Web 框架,用于基于 Python 3.7+ 构建 API。本文介绍了如何使用 FastAPI 构建 Python Web API,并将其容器化为 Docker 镜像部署运行。FastAPI 的优势包括卓越的速度、优于其他几个 Python 后端框架以及与 Express.js 等流行框架竞争。选择 FastAPI 的原因包括高性能、快速运行以及无需进行大量设置和配置即可快速构建 API。此外,FastAPI 支持直接生成 OpenAPI 规范文档,无需花费精力安装额外的库来生成 Flask 或 Django 的 OpenAPI 文档。

为了部署 FastAPI 服务,可以使用 Docker 进行容器化。Docker 可以简化应用程序的部署和管理过程,提高应用程序在不同环境中的可移植性。在开发过程中,推荐使用 PyCharm 这样的集成开发环境(IDE)来编写和调试 FastAPI 服务。

总之,FastAPI 是一个高性能、易用的 Web 框架,非常适合构建各种类型的应用程序,如机器学习应用程序、移动应用程序等。通过结合 Docker 部署,可以轻松地将 FastAPI 应用程序部署到服务器上,并实现容器化管理。希望本文能为 Python 开发新手提供一些参考,并期待在后续文章中进一步介绍 FastAPI 框架的高级功能。

七、References

  • FastAPI Documents:
  • https://fastapi.tiangolo.com/
  • FastAPI GitHub:
  • https://github.com/tiangolo/fastapi
  • Uvicorn Gunicorn Docker Image:
  • https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术狂潮AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值