FastAPI是一个快速、现代化、基于Python的Web框架。它使用Python 3.6+所提供的新 features,例如 type hints 和 async/await语法。FastAPI 灵活且易于使用,提供了更快的开发体验,同时保证了代码的类型安全和 async流程。
在实际开发中,API调用通常需要提供参数,提供的参数可以是查询参数、请求体参数或路径参数。FastAPI 提供了方便的API请求参数的处理方法。本篇文章将会介绍如何在FastAPI中使用路径参数进行参数化请求。
1. 什么是路径参数?
在FastAPI的API中,路径参数使用花括号({})括起来,形成动态路由。例如:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
上面的代码中,“/items/{item_id}” 表示一个动态路由,其中 {} 包括在路径中的部分表示了一个路径参数。例如,如果我们输入“/items/12”,我们的API将返回{"item_id": 12}。
2. 如何使用路径参数进行参数化请求?
路径参数使得我们能够根据不同的参数从同一个API端点中返回不同的结果。我们可以将路径参数传递给API方法,并将其用于生成标准响应。以下是如何使用路径参数构建API请求的示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
在上面的代码中,API将接受一个名为“item_id”的路径参数。当我们通过路径“/items/42”调用API时,FastAPI将会将42作为参数传给API“read_item”函数,并返回以下结果:
{"item_id": 42}
我们可以在路径中添加多个路径参数,如下所示:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: str):
return {"user_id": user_id, "item_id": item_id}
在这个例子中,我们可以看到一个有两个路径参数的动态路由。程序中的 API 方法将接受两个参数,分别是“user_id”和“item_id”。当我们拨打“/users/12/items/asdf”的API时,FastAPI 将会调用 API方法并将12作为“user_id”和“asdf”作为“item_id”的参数传递给该方法,并最终返回以下结果:
{"user_id": 12, "item_id": "asdf"}
3. 如何使用可选的路径参数?
有时候,我们的API请求需要在 URL 路径中包含一些 应用场景 API 方法中调用,并且一些可能存在但也可能不存在的其他数据。为了这些情况,FastAPI提供了可选路径参数。
可选路径参数由int,float,Path类型中的一种定义。例如,以下是将一个可选的路径参数添加到我们之前的示例中的方法的方法:
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: str, q: Optional[str] = None):
if q:
return {"user_id": user_id, "item_id": item_id, "q": q}
return {"user_id": user_id, "item_id": item_id}
这段代码中,我们为方法添加了一个可选的q参数,用None初始化它。如果这个参数出现在URL路径中,它将具有它的值,否则它将是None。
4. 总结
如果您需要一个Web框架,FastAPI 是一个值得尝试的选择,它简单易用,但强大且快速。本文介绍了如何使用FastAPI中的路径参数进行参数化请求,便于您构建更加灵活的API接口。FastAPI 还支持不同类型的参数,如查询参数和请求体参数,有兴趣的读者可以自行了解。