快速掌握 FastAPI 路由:从基础到进阶
前言FastAPI 是一个现代的、快速高性能的 Web 框架用于构建 API。它基于 Python 类型注解支持自动生成 OpenAPI 文档且性能优越适合构建高效的 Web API。本文将详细介绍如何在 FastAPI 中使用路由处理请求帮助新手更好地理解如何使用 FastAPI 创建 Web 应用。一、什么是 FastAPI 路由在 FastAPI 中路由是将 HTTP 请求与相应的处理函数进行映射的机制。当用户通过浏览器或其他客户端发起请求时FastAPI 根据请求的 URL 路径和 HTTP 方法GET、POST、PUT、DELETE等找到相应的视图函数进行处理。通过定义不同的路由FastAPI 能够为各种请求提供相应的响应并且可以自动生成文档方便开发者和用户查看和测试 API。二、FastAPI 路由基础1. 定义基本路由FastAPI 中的路由非常简单主要通过app.get()、app.post()等装饰器来定义。最基本的路由示例如下fromfastapiimportFastAPI appFastAPI()app.get(/)defread_root():return{message:Hello, World!}代码解析app.get(/)表示当访问根路径/时调用read_root()函数。read_root()返回一个字典FastAPI 会自动将其转换为 JSON 响应。2. 路由支持不同的 HTTP 方法FastAPI 支持处理不同的 HTTP 请求方法如GET、POST、PUT、DELETE等。可以使用相应的装饰器来定义不同的方法。app.post(/create)defcreate_item(item:dict):return{message:Item created,data:item}代码解析app.post(/create)定义一个 POST 请求的路由当访问/create路径时调用create_item()函数。item: dictFastAPI 会自动将 POST 请求的 JSON 数据解析成 Python 字典传递给item参数。三、路由参数与类型注解1. 路由参数FastAPI 允许从路径中提取参数例如当我们访问/items/42时42可以作为一个参数传递给视图函数。app.get(/items/{item_id})defread_item(item_id:int):return{item_id:item_id}代码解析/{item_id}FastAPI 会将路径中的item_id提取为一个参数并传递给视图函数。item_id: intFastAPI 会自动将路径中的参数转换为指定的类型保证参数类型的正确性。2. 路由查询参数除了路径参数外我们还可以在 URL 中传递查询参数。例如访问/items?qpython时可以获取查询参数q。app.get(/items)defsearch_items(q:strNone):return{query:q}代码解析q: str Noneq是一个查询参数FastAPI 会从 URL 中解析q参数的值如果没有提供该参数默认为None。四、路径参数与查询参数混合有时我们需要同时使用路径参数和查询参数。FastAPI 完全支持这种需求可以在函数中同时定义路径参数和查询参数。app.get(/items/{item_id})defread_item(item_id:int,q:strNone):return{item_id:item_id,query:q}代码解析/items/{item_id}从路径中获取item_id。q: str None从查询参数中获取q。当用户访问/items/42?qpython时item_id的值为42q的值为python。五、验证与类型注解FastAPI 强大的地方在于它自动进行参数验证和类型检查。你可以通过类型注解来指定参数的类型FastAPI 会根据这些注解进行自动验证。1. 请求体的验证FastAPI 支持将请求体解析为 Python 对象支持 Pydantic 数据模型。你可以定义一个 Pydantic 模型来验证请求体的数据。frompydanticimportBaseModelclassItem(BaseModel):name:strdescription:strNoneprice:floattax:floatNoneapp.post(/items/)defcreate_item(item:Item):return{item:item}代码解析Item是一个 Pydantic 模型它定义了请求体的结构。create_item(item: Item)FastAPI 会自动验证请求体是否符合Item模型的要求。2. 数字范围验证FastAPI 还支持通过类型注解来定义参数的验证规则例如你可以限制数字参数的范围。app.get(/items/{item_id})defread_item(item_id:int,price:float0.0):ifprice0:raiseValueError(Price cannot be negative)return{item_id:item_id,price:price}代码解析price: float 0.0提供一个查询参数price并进行验证确保它的值是一个非负数。六、路由重定向与错误处理1. 路由重定向在某些情况下我们可能希望对某些路径进行重定向。FastAPI 提供了简单的机制来实现路由重定向。fromfastapi.responsesimportRedirectResponseapp.get(/old)defredirect_to_new():returnRedirectResponse(url/new)代码解析RedirectResponse(url/new)当访问/old路径时会自动重定向到/new路径。2. 错误处理FastAPI 也允许我们处理常见的 HTTP 错误。例如访问不存在的路由时FastAPI 会返回一个 404 错误。fromfastapiimportHTTPExceptionapp.get(/items/{item_id})defread_item(item_id:int):ifitem_id!42:raiseHTTPException(status_code404,detailItem not found)return{item_id:item_id}代码解析HTTPException(status_code404, detailItem not found)当请求的item_id不为42时FastAPI 会抛出一个 HTTP 404 错误。七、高级路由技巧1. 路由中的依赖注入FastAPI 支持依赖注入通过依赖项我们可以复用逻辑并将其注入到多个路由中。fromfastapiimportDependsdefcommon_parameters(q:strNone,skip:int0,limit:int10):return{q:q,skip:skip,limit:limit}app.get(/items/)defread_items(commons:dictDepends(common_parameters)):return{items:commons}代码解析Depends(common_parameters)FastAPI 会自动调用common_parameters函数并将其结果传递给路由处理函数。总结FastAPI 提供了一种简单而高效的方式来定义路由。通过使用路径参数、查询参数、请求体的验证和类型注解开发者能够快速构建出结构清晰且高效的 API。本文详细介绍了 FastAPI 路由的基础使用、类型注解、验证以及错误处理等内容掌握这些基础和进阶技巧可以帮助你更加高效地进行 API 开发。通过 FastAPI 提供的灵活路由机制和自动文档生成功能你可以构建出高性能、易于维护的 Web 应用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2521993.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!