如何在FastAPI中使用OpenAPI规范定义API接口

1. 介绍

FastAPI是一个快速,现代化,Web框架,用于构建APIs和微服务。它基于Python 3.6+的标准类型提示进行构建,并使用非常快的代码生成以获得高性能。在这篇文章中,我们将了解如何使用FastAPI来定义API接口,并使用OpenAPI规范来描述它们。

2. 安装

2.1. 创建虚拟环境

首先,我们需要安装Python 3.6+。一旦安装了Python,我们可以使用虚拟环境来隔离我们的依赖项。打开终端并运行以下命令:

python3 -m venv env

source env/bin/activate

2.2. 安装FastAPI和uvicorn

安装FastAPI和uvicorn的最简单方法是使用pip。在终端中运行以下命令:

pip install fastapi uvicorn

3. 创建API

3.1. 创建main.py文件

在我们的项目目录中,我们将创建一个名为main.py的文件,该文件将包含我们的API定义。在main.py中,我们需要导入FastAPI:

from fastapi import FastAPI

app = FastAPI()

这将创建一个名为app的FastAPI实例,我们可以在其中定义路由,中间件等。

3.2. 添加路由

要添加路由,请使用app对实例进行装饰器。装饰器用于定义HTTP请求处理程序。我们将添加一个GET请求处理程序,该处理程序将返回“Hello World!”文本。我们可以这样做:

@app.get("/")

async def read_root():

return {"Hello": "World"}

在这里,我们为根路径“/”添加了一个GET路由。路由的名称是“read_root”,我们使用async关键字定义它。对于此路由,我们简单地返回JSON对象:{"Hello": "World"},FastAPI将自动将其转换为JSON格式并返回给客户端。

3.3. 运行应用程序

现在我们已经定义了我们的API,现在是时候运行它了。我们将使用uvicorn来运行它。在终端中,运行以下命令:

uvicorn main:app --reload

这将启动一个开发服务器,它将我们的应用程序绑定到http://localhost:8000。打开浏览器并转到此网址,您应该看到JSON响应:{"Hello": "World"}

4. 使用OpenAPI规范定义API接口

现在我们已经定义了一个简单的API,让我们看看如何使用OpenAPI规范来定义它。

4.1. 安装swagger-ui和pydantic

Swagger UI是一个可视化的用户界面,它为与API交互的用户提供了一个优雅的界面。我们将使用Swagger UI来显示我们的API规范。要安装Swagger UI,请使用以下命令:

pip install swagger-ui-pydantic

我们还需要安装pydantic,这是FastAPI使用的数据验证库:

pip install pydantic

4.2. 添加模型

我们需要为API模型定义一个数据模型。我们将使用pydantic的模型来定义此模型。在main.py文件中,添加以下代码:

from typing import Optional

from pydantic import BaseModel

class Item(BaseModel):

name: str

price: float

is_offer: Optional[bool] = None

在这里,我们导入BaseModel和Optional类。我们定义了一个名为Item的数据模型,该模型有三个字段:名称,价格和是否为报价。我们使用价格和is_offer字段类型的float和Optional进行了注释。

4.3. 添加API路由

现在我们需要为我们的API路由添加一个数据模型。我们将使用HTTP POST请求来创建新项目。我们可以用以下代码来告诉FastAPI:

@app.post("/items/")

async def create_item(item: Item):

return item

在这里,我们定义了一个名为create_item的POST路由,用于创建项目。我们使用了async和await关键字,以便我们可以异步地处理请求。我们还声明了一个名为item的参数,它使用我们在前面定义的Item数据模型。在此函数体内,我们仅返回了传递给我们的项目。

4.4. 添加Swagger UI支持

现在我们需要告诉FastAPI生成OpenAPI文档。为此,我们使用JSON对FastAPI进行OpenAPI描述注册。我们将使用一个FastAPI扩展程序来自动执行此操作。在main.py文件的顶部导入以下代码:

from fastapi.openapi.utils import get_openapi

from fastapi.openapi.docs import get_swagger_ui_html

from fastapi.staticfiles import StaticFiles

app = FastAPI(docs_url=None, redoc_url=None)

@app.get("/docs", include_in_schema=False)

async def get_documentation():

return get_swagger_ui_html(openapi_url="/openapi.json", title="docs")

app.mount("/static", StaticFiles(directory="static"), name="static")

def custom_openapi():

if app.openapi_schema:

return app.openapi_schema

openapi_schema = get_openapi(

title="My API",

version="0.1.0",

description="This is a very good API",

routes=app.routes,

)

app.openapi_schema = openapi_schema

return app.openapi_schema

app.openapi = custom_openapi

在这里,我们定义了一个名为get_documentation的GET路由。该路由返回Swagger UI的HTML内容,其中包含对生成的API规范文件进行可视化的支持。

我们还添加了一个名为custom_openapi的函数,该函数返回我们的API规范定义。在这里,我们定义了API的名称,版本和描述。我们还将路由传递给get_openapi函数以生成API规范定义。

4.5. 运行应用程序

现在我们已经定义了我们的API规范,让我们运行它并查看在Swagger UI中如何显示它。运行以下命令启动服务器:

uvicorn main:app --reload

现在,我们可以打开http://localhost:8000/docs,看到Swagger UI,其中包含我们的API规范文档。它显示了转到/create_item路径的POST请求,该路径需要Item数据模型中定义的名称和价格字段。

总结

在本文中,我们学习了如何使用FastAPI定义API接口。我们还学习了如何使用OpenAPI规范来描述API,并使用Swagger UI自动生成文档。FastAPI是一个非常快速,现代化的Web框架,非常适合构建APIs和微服务。

后端开发标签