目录
一、安装及依赖
二、基本架构
三、使用FastAPI实现Web应用程序
四、请求参数和响应
五、总结
FastAPI是一个现代的、快速的Web框架,它能够帮助开发者快速构建高性能的Web应用程序。它基于Python 3.6及以上版本,采用异步框架:ASGI。本文将对FastAPI的基本架构和使用进行详细介绍,并通过一个示例应用程序来演示其功能。
在开始快速构建Web应用程序之前,首先需要安装FastAPI和相关依赖。我们可以使用Python自带的pip包管理器来安装FastAPI。在命令行窗口中输入以下命令即可:
pip install fastapi
pip install uvicorn[standard]
其中,uvicorn是一个基于ASGI的Python Web Server Gateway Interface服务器,用于将我们的应用程序运行在本地开发环境中。
FastAPI基于ASGI异步框架构建,这意味着我们可以使用异步Python来提供更高效的Web应用程序。FastAPI包含以下主要部分:
为了演示FastAPI的使用方法,我们将使用它来构建一个简单的Web应用程序。我们的应用程序将提供以下API功能:
下面是应用程序的基本代码(文件名:main.py):
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/add/{num1}/{num2}")
async def addnumbers(num1: int, num2: int):
return {"sum": num1 + num2}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
这个代码块包含三个API端点,分别是:
在上述代码中,@app是FastAPI的装饰器。例如,@app.get()然后为此特定HTTP方法和类提供URL路径,可以扩展这些路由来接收参数,并返回响应。不同路径的处理函数中的参数,例如num1, num2和item_id,在FastAPI中具有自动校验和转换的能力。
我们还需要通过以下命令在本地运行应用程序:uvicorn main:app --reload。其中main是我们的文件名,app是FastAPI应用程序对象的实例化。–reload则是让应用程序在代码更改时自动重新加载。
完成以上步骤,您可以访问http://localhost:8000/add/5/10页面来浏览您的Web应用程序。
FastAPI是一个现代化、高性能的Python Web框架,它能够帮助开发者快速构建Web应用程序。我们在本文中介绍了如何安装FastAPI及其依赖项,并演示了如何使用FastAPI构建一个简单的Web应用程序。由于FastAPI的性能优异,我们推荐开发者尝试使用FastAPI来开发其自己的Web应用程序。
FastAPI支持多种类型的请求参数和响应体,例如查询参数、路径参数、请求体和响应体。它会自动对请求参数类型进行校验,确保请求参数结构正确且类型正确。以下是一些实例:
1.查询参数
查询参数通常用于过滤查询结果,相当于在URL路径后添加?key1=value1&key2=value2。FastAPI可以直接将查询参数转换为Python对象,例如:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = None):
"""
q:查询参数
"""
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
访问http://localhost:8000/items/?q=test可以在查询参数q中传递test字符串,并将其添加到JSON响应中。结果将如下所示:
{
"items": [
{
"item_id": "Foo"
},
{
"item_id": "Bar"
}
],
"q": "test"
}
2.路径参数
路径参数通常用于唯一地标识资源,例如路径/items/{item_id}。FastAPI会自动将路径参数转换为相应的Python类型,例如:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
"""
item_id: 路径参数
q: 查询参数
"""
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
访问http://localhost:8000/items/42可以将42作为路径参数item_id传递并将其添加到JSON响应中。结果将如下所示:
{
"item_id": 42
}
3.请求体
请求体通常用于包含需要处理的数据,FastAPI支持各种类型的请求体,例如JSON,表单,多部分文件等。以下是JSON请求体的示例:
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
"""
item:请求体
"""
return item
将以下JSON请求体添加到POST请求http://localhost:8000/items/:
{
"name": "Foo",
"price": 42.0
}
结果将如下所示:
{
"name": "Foo",
"price": 42.0,
"is_offer": null
}
4.响应体
响应体可以是任何Python类型,但通常使用Pydantic模型。Pydantic模型是Python 3.6+的数据验证和序列化/反序列化库。以下是一个Pydantic模型的示例:
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
class ItemResponse(BaseModel):
item_id: int
item: Item
app = FastAPI()
@app.post("/items/", response_model=ItemResponse)
async def create_item(item: Item):
return {"item_id": 1, "item": item}
在上面的示例中,我们使用response_model参数告诉FastAPI响应的模型是ItemResponse。此模型由两个属性组成:item_id和item。当我们将以下JSON请求体添加到POST请求http://localhost:8000/items/时:
{
"name": "Foo",
"price": 42.0
}
FastAPI返回以下JSON响应体:
{
"item_id": 1,
"item": {
"name": "Foo",
"price": 42.0,
"is_offer": null
}
}
在本文中,我们介绍了FastAPI的基本架构和如何使用它构建一个简单的Web应用程序。我们了解了请求参数和响应体类型,FastAPI能够自动对请求参数类型进行校验,并将Python对象转换为JSON响应体。FastAPI还允许我们在路由处理程序之前解析并注入依赖项。
FastAPI是一个现代化,高性能的Python Web框架。它继承了Python的简单性和快速性,并新增了一些高效的功能,例如异步框架和Pydantic模型等。如果您想构建高效的Web应用程序,FastAPI是一个非常不错的选择。