如何在FastAPI中灵活使用路径参数、查询参数和请求体参数进行接口设计

In FastAPI, you can handle different types of parameters in your endpoints, such as path parameters, query parameters, and request body parameters. Each type of parameter is handled differently depending on how it is defined in the endpoint function.

1. Path Parameters

Path parameters are part of the URL path. They are typically used to pass resources or identifiers that are part of the route, for example, /items/{item_id}.

Example:

python 复制代码
@app.put("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

2. Query Parameters

Query parameters are part of the URL after the ? symbol, and they are used to pass additional data to the request. They are typically used with GET or PUT requests and are defined as function parameters without braces.

Example with a single query parameter:

python 复制代码
@app.put("/items/")
async def read_item(item_id: int):
    return {"item_id": item_id}

To test this with requests:

python 复制代码
import requests
url = 'http://127.0.0.1:8009/items/?item_id=5'
res = requests.put(url)
print(res.text)  # Output: {"item_id": 5}

3. Request Body Parameters

Request body parameters are used when you need to send structured data as the body of the request. These can be either single or multiple parameters passed as JSON in the request body.

Single Request Body Parameter

To specify that a parameter should be in the request body, you use Body().

Example:

python 复制代码
from fastapi import Body, FastAPI

@app.put("/items/")
async def read_item(item_id: int = Body(...)):
    return {"item_id": item_id}

To test with requests:

python 复制代码
import requests
url = 'http://127.0.0.1:8009/items/'
res = requests.put(url, json={"item_id": 5})
print(res.text)  # Output: {"item_id": 5}
Multiple Request Body Parameters

You can also define multiple parameters in the request body by using Body() for each one.

Example:

python 复制代码
from fastapi import Body, FastAPI

@app.put("/items/")
async def read_item(item_id: int = Body(...), name: str = Body(...)):
    return {"item_id": item_id, "name": name}

To test with requests:

python 复制代码
import requests
url = 'http://127.0.0.1:8009/items/'
res = requests.put(url, json={"item_id": 5, "name": "张三"})
print(res.text)  # Output: {"item_id": 5, "name": "张三"}

4. Using Pydantic Models for Request Body

You can also use Pydantic models to define request bodies, which gives you more control and validation over the incoming data.

Example:

python 复制代码
from fastapi import FastAPI
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

@app.put("/items/")
async def read_item(item: Item):
    return {"name": item.name, "price": item.price}

To test with requests:

python 复制代码
import requests
url = 'http://127.0.0.1:8009/items/'
data = {"name": "细胞生物学", "description": "考研书籍", "price": 35.8, "tax": 0.6}
res = requests.put(url, json=data)
print(res.text)  # Output: {"name": "细胞生物学", "price": 35.8}

5. Mixed Parameters (Path, Query, and Body)

You can also mix path, query, and body parameters in a single endpoint. FastAPI will automatically handle them correctly.

Example:

python 复制代码
from fastapi import Body, FastAPI

@app.put("/items/{name}")
async def read_item(name: str, age: int, item_id: int = Body(...)):
    return {"name": name, "age": age, "item_id": item_id}

Testing via FastAPI's Documentation

FastAPI also provides a built-in interactive docs interface at /docs that allows you to test all your endpoints directly in the browser. You can input values for query parameters, request body parameters, and see the results.

To access the docs:

  1. Run the FastAPI app.
  2. Open http://127.0.0.1:8009/docs in a browser.
  3. Test your endpoints using the interactive interface by clicking on "Try it out", filling in the parameters, and clicking "Execute".
相关推荐
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud1 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
moonless02221 天前
FastAPI框架,这一小篇就能搞懂精髓。
http·fastapi
DemonAvenger1 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥2 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud2 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug2 天前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom2 天前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试