FastAPI教程:快速构建高性能API

打印 上一主题 下一主题

主题 1016|帖子 1016|积分 3048

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
FastAPI教程:快速构建高性能API
 
先容
 
FastAPI是一个当代的、快速的(高性能)Web框架,用于构建APIs,基于尺度的Python类型提示。它非常得当用于构建高效、易于维护的API服务。FastAPI支持主动生成文档,输入数据验证和异步编程,且性能靠近Go和Node.js。
 
本教程目标
 
本教程将领导你构建一个简单的FastAPI应用,包括:
 
1. 创建FastAPI项目
 
 
2. 界说和处理惩罚API端点
 
 
3. 输入数据验证与主动文档
 
 
4. 异步支持
 
 
5. 摆设FastAPI应用
 
 
 
环境准备
 
安装FastAPI与Uvicorn
 
在开始之前,我们必要安装FastAPI和Uvicorn。Uvicorn是一个ASGI服务器,通常与FastAPI一起使用,提供高性能的异步Web服务。
 
pip install fastapi uvicorn
 
目录结构
 
我们发起的项目目录结构如下:
 
/fastapi-example
    ├── app/
    │ ├── main.py
    │ ├── models.py
    │ └── schemas.py
    ├── requirements.txt
    └── README.md
 
创建第一个FastAPI应用
 
1. 编写 main.py
 
在app/main.py中,创建FastAPI应用,并界说一个简单的路由:
 
from fastapi import FastAPI
 
# 创建FastAPI实例
app = FastAPI()
 
# 路由:根路径(/)
@app.get("/")
async def read_root():
    return {"message": "Hello, World!"}
 
表明:
 
FastAPI():创建一个FastAPI实例。
 
@app.get("/"):界说GET哀求的路由,根路径返回一个简单的JSON相应。
 
async def read_root():使用异步函数来处理惩罚哀求。
 
 
2. 运行应用
 
可以通过Uvicorn启动应用:
 
uvicorn app.main:app --reload
 
app.main:app表示从app/main.py中加载FastAPI实例。
 
--reload参数使应用在代码修改后主动重载。
 
 
3. 访问应用
 
打开浏览器并访问 http://127.0.0.1:8000/,你应该看到如下输出:
 
{"message": "Hello, World!"}
 
路由与哀求
 
FastAPI支持多种HTTP方法,包括GET、POST、PUT、DELETE等。我们来继续扩展API,增加一个POST哀求,处理惩罚JSON数据。
 
1. 界说一个Pydantic模子
 
Pydantic是FastAPI用于数据验证和序列化的工具。我们可以界说一个Pydantic模子来确保API吸收的数据格式正确。
 
在app/schemas.py中:
 
from pydantic import BaseModel
 
# 创建Pydantic模子
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
 
表明:
 
BaseModel是所有Pydantic模子的基类。
 
name, description, price, tax是模子的字段,类型是Python的数据类型,FastAPI会根据这些类型主动进行数据验证。
 
 
2. 添加POST路由
 
在app/main.py中,界说一个POST路由,吸收Item模子的数据:
 
from fastapi import FastAPI
from app.schemas import Item
 
app = FastAPI()
 
@app.post("/items/")
async def create_item(item: Item):
    return {"name": item.name, "price": item.price}
 
表明:
 
@app.post("/items/"):界说POST哀求,路径为/items/。
 
item: Item:FastAPI会主动剖析哀求体中的JSON数据,并将其映射到Item模子。
 
 
3. 测试POST哀求
 
使用工具如Postman或cURL,向 http://127.0.0.1:8000/items/ 发送一个POST哀求:
 
{  
    "name": "Laptop",
    "description": "A high-end laptop",
    "price": 1200.50,
    "tax": 100.00
}
 
相应应该是:
 
{  
    "name": "Laptop",
    "price": 1200.5
}
 
主动生成文档
 
FastAPI主动生成API文档并提供两个界面:
 
1. Swagger UI:默认在/docs路径下提供。
 
 
2. ReDoc:默认在/redoc路径下提供。
 
 
 
你可以访问:
 
Swagger UI
 
ReDoc
 
 
异步支持
 
FastAPI支持异步路由函数,可以进步处理惩罚并发哀求的性能。在FastAPI中,异步函数由async def声明,结合异步数据库查询或其他IO利用,能够大幅提拔应用的吞吐量。
 
@app.get("/items/{item_id}")
async def read_item(item_id: int):
    # 模拟异步数据库查询
    item = await fake_db_query(item_id)
    return {"item": item}
 
在现实应用中,可以将数据库利用、文件处理惩罚等I/O麋集型任务实现为异步利用,从而提拔性能。
 
哀求与相应模子
 
FastAPI答应你为哀求体、相应体及查询参数使用模子。这些模子不仅能进行数据验证,还能主动生成API文档。
 
1. 自界说相应模子
 
你可以自界说相应体的结构,保证返回的数据符合预期格式:
 
from fastapi import FastAPI
from pydantic import BaseModel
 
class Item(BaseModel):
    name: str
    price: float
 
class ResponseModel(BaseModel):
    success: bool
    data: Item
 
@app.post("/create_item/", response_model=ResponseModel)
async def create_item(item: Item):
    return ResponseModel(success=True, data=item)
 
2. 查询参数模子
 
FastAPI答应你通过界说模子来处理惩罚查询参数,使其更清晰易读:
 
from fastapi import FastAPI, Query
 
@app.get("/items/")
async def get_items(skip: int = Query(0, alias="page", ge=0), limit: int = Query(10, le=100)):
    return {"skip": skip, "limit": limit}
 
在上面的代码中,我们使用了Query类来界说查询参数。ge表示参数的最小值,le表示最大值。
 
摆设FastAPI应用
 
使用Docker摆设
 
FastAPI可以与Docker一起使用,方便摆设到任何环境。以下是一个简单的Dockerfile示例:
 
# 使用官方Python镜像
FROM python:3.9
 
# 设置工作目录
WORKDIR /app
 
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
 
# 复制项目代码
COPY . .
 
# 运行应用
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
 
构建和运行Docker镜像
 
docker build -t fastapi-example .
docker run -d -p 8000:8000 fastapi-example
 
现在,FastAPI应用就可以通过http://localhost:8000访问。
 
总结
 
FastAPI是一个功能强盛、易于使用的框架,提供了强类型的验证、主动生成文档和高效的异步支持。通过本教程,我们创建了一个简单的FastAPI应用,并演示了怎样处理惩罚GET和POST哀求,进行数据验证,并实现API文档的主动生成。你还可以使用Docker将应用摆设到生产环境中。
 
希望这篇教程能够帮助你快速上手FastAPI,并开始构建高效的API服务!
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表