大家好,我是“一行”,今天我们来聊聊一个非常有趣且强大的 Python Web 框架——FastAPI。如果你是 Python 开发者,并且对构建 Web API 有兴趣,那么你一定会爱上这个框架!FastAPI 是为了高性能而生的,它的速度可以和 Node.js、Go 这种语言的 API 相媲美,而且它还支持自动化生成文档、类型检查和验证等一系列超级实用的功能。今天,我们就一起深入了解 FastAPI,看看它是如何帮助我们高效、轻松地构建 Web 应用的!
什么是 FastAPI?
FastAPI 是一个现代的、快速(高性能)的 Web 框架,专门用于构建 APIs。它的名字就代表了它的特点:Fast(快速)和API(应用程序接口)。
FastAPI 的优势主要体现在:
性能:FastAPI 是基于 Starlette 构建的,而 Starlette 是一个非常高效的 Web 框架,FastAPI 使得我们的 API 性能极为优秀。
易用性:FastAPI 支持自动生成 OpenAPI 文档,减少了手动编写文档的麻烦。
自动验证:内置的 Pydantic 库让输入的数据自动进行验证,避免了很多常见的错误。
如何安装 FastAPI 和 Uvicorn
FastAPI 是一个轻量级的框架,安装起来非常简单。我们还需要安装 Uvicorn 作为服务器,来运行我们的 FastAPI 应用。Uvicorn 是一个高性能的 ASGI 服务器,专门用来与 FastAPI 配合。
打开命令行,输入以下命令安装 FastAPI 和 Uvicorn:
pip install fastapi uvicorn
创建第一个 FastAPI 应用
接下来,我们来创建一个简单的 FastAPI 应用,展示如何快速启动一个 API。
代码示例 1:创建简单的 API
from fastapi import FastAPI
# 创建 FastAPI 实例
app = FastAPI()
# 定义一个路由,访问根路径时返回一个简单的消息
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
解释:
首先,我们导入了
FastAPI
类,并创建了一个 FastAPI 实例app
。然后,我们使用
@app.get("/")
装饰器定义了一个 GET 请求的路由,它会返回一个简单的 JSON 响应。
小贴士:FastAPI 使用的是 Python 的类型注解,所以你可以在函数参数和返回值中使用类型提示。FastAPI 会自动进行类型验证和转换,让你的代码更安全、更高效。
运行 FastAPI 应用
保存上面的代码为 main.py
文件后,我们可以使用 Uvicorn 启动这个应用:
uvicorn main:app --reload
main
是文件名(不需要.py
后缀),app
是 FastAPI 实例。--reload
参数让你在修改代码后自动重启服务器,方便开发调试。
打开浏览器,访问 http://127.0.0.1:8000/
,你应该会看到返回的 JSON 数据:
{
"message": "Hello, FastAPI!"
}
非常简单吧!这就是 FastAPI 的基本使用。
处理请求参数:查询参数和路径参数
FastAPI 提供了丰富的方式来处理客户端发送的请求参数。常见的请求参数包括查询参数和路径参数。让我们分别来看一下如何使用它们。
代码示例 2:查询参数
from fastapi import FastAPI
app = FastAPI()
@app.get("/greet")
def greet(name: str = "World"):
return {"message": f"Hello, {name}!"}
解释:
name
是一个查询参数,可以通过 URL 查询字符串传递。如果请求 URL 是/greet?name=John
,返回的消息就是Hello, John!
。如果没有传递name
参数,默认值是World
。
访问:
http://127.0.0.1:8000/greet?name=Alice
返回:
{
"message": "Hello, Alice!"
}
代码示例 3:路径参数
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
def get_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
解释:
这里我们定义了一个路径参数
item_id
,通过 URL 路径传递。q
是查询参数,可以选择性传递。
访问:
http://127.0.0.1:8000/items/42?q=test
返回:
{
"item_id": 42,
"q": "test"
}
请求体:使用 Pydantic 模型
在 FastAPI 中,我们经常需要接收复杂的请求数据,通常是 JSON 格式的。为了处理这些数据,FastAPI 使用了 Pydantic 模型来验证和解析请求体。
代码示例 4:接收 JSON 数据
from fastapi import FastAPI
from pydantic import BaseModel
# 定义 Pydantic 模型
class Item(BaseModel):
name: str
price: float
is_available: bool
app = FastAPI()
@app.post("/items/")
def create_item(item: Item):
return {"name": item.name, "price": item.price, "is_available": item.is_available}
解释:
我们定义了一个
Item
类,继承自 Pydantic 的BaseModel
,它会自动验证请求体中的数据类型。create_item
路由会接收一个 POST 请求,内容是一个 JSON 对象,FastAPI 会自动将 JSON 数据解析为Item
对象,并进行类型验证。
请求:
POST http://127.0.0.1:8000/items/
Content-Type: application/json
{
"name": "Laptop",
"price": 1500.50,
"is_available": true
}
返回:
{
"name": "Laptop",
"price": 1500.5,
"is_available": true
}
自动生成文档
FastAPI 的一大亮点是它能自动生成 API 文档。只要你启动了 FastAPI 应用,它就会自动为你生成基于 OpenAPI 的文档,并且支持交互式测试。
访问:
http://127.0.0.1:8000/docs
你会看到一个漂亮的 API 文档界面,可以直接通过这个页面发送请求来测试你的 API。
总结
今天我们一起学习了 FastAPI 的基本用法,了解了如何创建一个高效的 Web API。通过简单的例子,我们展示了如何定义路由、处理请求参数、接收请求体并自动验证数据类型,还体验了 FastAPI 自动生成文档的便捷功能。
小贴士:
FastAPI 是基于 Python 的类型注解的,记得在函数参数中使用类型注解,它不仅让代码更清晰,还能让 FastAPI 自动进行数据验证。
使用 Pydantic 模型来处理复杂数据时,确保你正确地定义了每个字段的类型和约束。
鼓励大家:Python 学习不仅仅是了解概念,最重要的是动手实践!通过多写代码、调试、测试,来加深对 FastAPI 的理解。今天的 Python 学习之旅就到这里啦!记得动手敲代码。祝大家学习愉快,Python 学习节节高!