首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FastAPI 路径参数详解

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API。它基于 Python 3.7+ 的类型提示(type hints)特性,提供了强大的数据验证和自动生成 API 文档的功能。在 FastAPI 中,路径参数(Path Parameters)是构建动态 URL 的核心功能之一。本文将详细介绍 FastAPI 中的路径参数,并通过多个示例来帮助你更好地理解和使用它们。

什么是路径参数?

路径参数是 URL 中的一部分,用于捕获动态值。例如,在一个博客应用中,你可能希望通过 URL 来获取特定文章的详细信息。URL 可能看起来像这样:/articles/123,其中123是文章的 ID。在这个例子中,123就是一个路径参数。

FastAPI 允许你通过定义路径操作函数(Path Operation Function)来捕获这些动态值,并将它们作为参数传递给函数。

基本用法

让我们从一个简单的例子开始。假设我们有一个 API,用于获取用户的详细信息。我们可以通过用户的 ID 来获取用户信息。

from fastapi import FastAPI

app = FastAPI()

@app.get("/users/{user_id}")

async def read_user(user_id: int):

  return {"user_id": user_id}

代码解析

导入 FastAPI:首先,我们导入FastAPI类,它是构建 API 的核心类。

创建 FastAPI 实例:我们创建了一个FastAPI实例,并将其赋值给app变量。

定义路径操作函数:我们使用@app.get("/users/{user_id}")装饰器来定义一个 GET 请求的路径操作函数。{user_id}是路径参数,FastAPI 会自动将其捕获并传递给函数。

函数参数:read_user函数的参数user_id被声明为int类型。FastAPI 会自动将 URL 中的user_id转换为整数类型,并进行数据验证。如果user_id不是整数,FastAPI 会返回一个 422 错误(Unprocessable Entity)。

返回结果:函数返回一个包含user_id的字典。

测试 API

启动 FastAPI 应用后,你可以通过访问/users/123来测试这个 API。FastAPI 会自动将123转换为整数,并返回{"user_id": 123}。

路径参数的类型转换

FastAPI 支持多种类型的路径参数,包括int、float、str、bool等。你可以根据需要选择合适的类型。

示例:使用 str 类型的路径参数

@app.get("/items/{item_name}")

async def read_item(item_name: str):

  return {"item_name": item_name}

在这个例子中,item_name是一个字符串类型的路径参数。你可以访问/items/foo,FastAPI 会返回{"item_name": "foo"}。

示例:使用 float 类型的路径参数

@app.get("/prices/{price}")

async def read_price(price: float):

  return {"price": price}

在这个例子中,price是一个浮点数类型的路径参数。你可以访问/prices/19.99,FastAPI 会返回{"price": 19.99}。

路径参数的顺序

在 FastAPI 中,路径参数的顺序非常重要。如果你定义了多个路径参数,它们的顺序必须与 URL 中的顺序一致。

示例:多个路径参数

@app.get("/users/{user_id}/items/{item_id}")

async def read_user_item(user_id: int, item_id: int):

  return {"user_id": user_id, "item_id": item_id}

在这个例子中,我们定义了两个路径参数:user_id和item_id。你可以访问/users/123/items/456,FastAPI 会返回{"user_id": 123, "item_id": 456}。

路径参数与查询参数的区别

路径参数是 URL 的一部分,而查询参数是 URL 中?后面的部分。例如,在/users/123?name=John中,123是路径参数,name=John是查询参数。

示例:路径参数与查询参数结合使用

@app.get("/users/{user_id}")

async def read_user(user_id: int, name: str = None):

  return {"user_id": user_id, "name": name}

在这个例子中,user_id是路径参数,name是查询参数。你可以访问/users/123?name=John,FastAPI 会返回{"user_id": 123, "name": "John"}。

路径参数的验证

FastAPI 提供了强大的数据验证功能。你可以通过类型提示来指定路径参数的类型,FastAPI 会自动进行验证。

示例:路径参数的验证

在这个例子中,我们使用Path来对user_id进行额外的验证。gt=0表示user_id必须大于 0。如果user_id不满足条件,FastAPI 会返回一个 422 错误。

总结

FastAPI 的路径参数功能非常强大且灵活。通过路径参数,你可以轻松构建动态 URL,并捕获 URL 中的动态值。FastAPI 还提供了丰富的类型支持和数据验证功能,帮助你构建健壮的 API。

在实际开发中,路径参数是构建 RESTful API 的重要组成部分。掌握路径参数的使用方法,可以帮助你更好地设计和实现 API。

希望本文对你理解和使用 FastAPI 的路径参数有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Ov2uy_D-rJkmuWFLLAOKH04A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券