FastAPI 这是一个非常流行且高性能的 Python 框架,本文将讲解如何在 FastAPI 中发送 GET 和 POST 请求,帮助你快速掌握基本操作及其高级应用。
准备工作
首先,我们需要安装 FastAPI 和 Uvicorn。打开你的命令行窗口,输入以下命令:
pip install fastapi
pip install uvicorn
如果你的系统安装的是 Python3,那么需要将pip
改为pip3
,否则会报错。
快速入门
在一个main.py
文件中,写下以下代码来创建一个基本的 FastAPI 应用:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
然后,在命令行中运行这个应用:
uvicorn main:app --reload
打开浏览器,访问 http://127.0.0.1:8000
,你应该会看到 {"Hello": "World"}
。
GET 请求简介
GET 请求用于从服务器获取数据。例如,当你访问一个网页时,你的浏览器实际上就是在发送 GET 请求。
POST 请求简介
POST 请求用于向服务器发送数据,比如提交一个表单。接下来,我们会详细介绍如何在 FastAPI 中处理这两种请求。
在 FastAPI 中处理 GET 请求
定义 GET 请求路由
我们来扩展一下我们的应用,添加一个处理 GET 请求的路由:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
这段代码定义了一个新的路由 /items/{item_id}
,它接收一个路径参数 item_id
和一个可选的查询参数 q
。
发送 GET 请求
现在,我们使用 Python 的 requests
库来发送一个 GET 请求。新建一个 Python 文件(比如 test_get.py
),写下以下代码:
import requests
response = requests.get("http://127.0.0.1:8000/items/1?q=somequery")
print(response.json())
运行这个文件,你会看到类似 {"item_id": 1, "q": "somequery"}
的输出。
在 FastAPI 中处理 POST 请求
定义 POST 请求路由
接下来,我们添加一个处理 POST 请求的路由:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/")
async def create_item(item: Item):
return item
这里,我们定义了一个数据模型 Item
,以及一个接受 Item
类型数据的 POST 路由。
发送 POST 请求
再新建一个 Python 文件(比如 test_post.py
),写下以下代码:
import requests
item_data = {
"name": "Foo",
"description": "A very nice Item",
"price": 35.4,
"tax": 3.2
}
response = requests.post("http://127.0.0.1:8000/items/", json=item_data)
print(response.json())
运行这个文件,你会看到你发送的数据被返回了回来。
处理请求和响应的高级功能
路径参数和查询参数你可以更复杂地处理参数,比如组合路径参数和查询参数,甚至是多级路径。
请求体和响应模型你可以自定义响应模型,改变返回的状态码和头信息,甚至可以添加更多的验证和处理逻辑。
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.post("/items/", response_model=Item, status_code=201)
async def create_item(item: Item):
return item
验证和处理错误处理客户端和服务器的错误也是 FastAPI 的强项。你可以定义自定义的错误处理函数,并返回友好的错误信息。
@app.get("/items/{item_id}")
async def read_item(item_id: int):
if item_id > 10:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id}
完整示例
我们把所有内容综合起来,创建一个完整的示例:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
async def create_item(item: Item):
return item
通过这个示例,你可以处理 GET 和 POST 请求,分别获取数据和提交数据。
使用 Apifox 测试和调试
Apifox 是一个集 API 文档、调试、Mock 和自动化测试于一体的工具,它可以帮助我们更加方便地调试和测试接口,还可以根据接口快速生成业务代码。
使用 Apifox 发送 GET 请求
打开 Apifox,创建一个新的 HTTP 项目,新建一个请求,并选择 GET
方法,输入请求 URL,例如 http://127.0.0.1:8000/items/1?q=somequery
。来到运行页,点击“发送”按钮,查看返回结果。
使用 Apifox 发送 POST 请求
打开 Apifox,创建一个新的 HTTP 项目,新建一个请求,并选择 POST
方法,输入请求 URL,例如 http://127.0.0.1:8000/items/
,在请求体中选择 JSON
格式,并输入以下内容:
{
"name": "Foo",
"description": "A very nice Item",
"price": 35.4,
"tax": 3.2
}
点击发送按钮,查看返回结果。
生成业务代码
Apifox 可以自动生成请求代码,包括生成 Python、JAVA、Axios 等代码。接口发送请求后,在下方的“实际请求”中,可以根据你的业务需求选择生成相应语言的代码。
除此之外,还可以在“文档”页面,点击右上角的 "生成代码" 按钮,你可以在此生成接口请求代码,也可以生成实际的业务代码。
比如我要生成一个 Python 的接口请求代码,其示例生成的代码如下图所示:
是不是非常 nice,利用 Apifox 能大大提升开发效率,快去试试吧!
总结
本文介绍了如何在 FastAPI 中发送 GET 和 POST 请求,帮助你快速掌握基本操作及高级应用。首先,安装 FastAPI 和 Uvicorn,然后编写和运行一个简单的 FastAPI 应用。详细介绍了处理 GET 和 POST 请求的代码示例,并演示了使用 Apifox 进行测试和调试,提高开发效率。通过这些内容,可以学会处理参数、请求体和响应模型,以及错误处理等高级功能。