标签导航:

fastapi如何优雅地处理逗号分隔的查询参数列表?

FastAPI中逗号分隔查询参数列表的处理方法

在使用FastAPI构建API时,经常需要处理多个可选参数,例如根据多个ID或状态筛选数据。直接使用列表类型作为查询参数,FastAPI会将每个列表元素解析成独立参数,导致URL冗长。本文介绍如何将列表参数以逗号分隔的形式传递,而非多个同名键值对。

例如,source参数期望接收多个枚举值,但FastAPI默认解析成多个source参数(例如:source=manual&source=vdna,而非source=manual,vdna)。

解决方法主要有两种:

方法一:字符串类型及后端解析

将参数类型声明为Optional[str],在后端代码中使用split(",")函数解析逗号分隔字符串。

from fastapi import APIRouter, Query
from typing import Optional

# ...其他代码...

@review.get('/list', summary='获取待审核列表')
def list_await_review(
    # ...其他参数...
    source: Optional[str] = Query(None, description="请使用逗号`,`分割多个参数,例如:`Manual,vDNA,text-match`"),
    # ...其他参数...
):
    parsed_source = source.split(",") if source else []
    # ...后续处理parsed_source...

此方法简单易懂,但需在参数描述中明确说明参数格式。

方法二:自定义参数解析逻辑 (此处略)

虽然可以使用依赖注入自定义解析逻辑,但为简便起见,此处不展开。此方法更灵活,可处理更复杂的解析逻辑,但代码复杂度也更高。

选择哪种方法取决于具体应用场景和开发者偏好。 方法一适用于大多数简单场景,方法二则适用于更复杂的需求。 通过以上方法,可以使URL更简洁易读。