You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中List作为查询参数的问题及代码拆分改造求助

FastAPI接口参数及请求格式修复方案

问题背景

需要将本地调用NeoController.create_nodes的代码拆分为FastAPI接口,当前API参数定义错误导致断言失败,同时请求URL格式不符合复杂数据传递要求。


1. 修复API接口参数定义

核心问题

原代码使用Query接收List[Node]是错误的:Query仅适用于URL查询参数(简单类型如字符串、数字),复杂对象需通过请求体传递。此外,Node类需支持JSON序列化,才能被FastAPI解析。

修复步骤

步骤1:让Node类支持序列化

修改ontologies.neo中的Node类,继承Pydantic的BaseModel(需先安装依赖:pip install pydantic):

from pydantic import BaseModel
from typing import List

class Node(BaseModel):
    # 字段需和原Node类的初始化参数一一对应
    path: str
    name: str
    attribute: List[str]

    # 若原Node是ORM类(如SQLAlchemy模型),添加配置兼容
    class Config:
        orm_mode = True

步骤2:修改FastAPI接口

将参数改为请求体接收,无需Query装饰器:

from ontologies.neo import Node
from fastapi import FastAPI
from typing import List
from fastapi.responses import JSONResponse

app = FastAPI(title="Neo4jAPI")

@app.post("/create/")
def create_nodes(instance: List[Node]):
    NeoController.create_nodes(instance)
    # 将Node实例转为字典后返回JSON响应
    return JSONResponse(content=[node.dict() for node in instance])

2. 修复请求URL及格式

核心问题

原请求通过URL参数传递instance是错误的:URL参数无法承载复杂对象,需将数据放在请求体中,以JSON格式发送。

修复后的请求代码

import requests
from ontologies.neo import Node
from typing import List

db_instance = "Instance:Edge:Datastore:AbstractDatastore:Docker:MongoDB"
ds_instance = "Instance:Edge:DataSource:Camera:IDS"
instance = [
    Node(path=db_instance, name="MongoDB", attribute=['']),
    Node(path=ds_instance, name="IDS", attribute=[''])
]

# 通过json参数传递序列化后的字典列表,requests自动设置Content-Type为application/json
response = requests.post(
    url="http://127.0.0.1:8080/create/",
    json=[node.dict() for node in instance]
)

# 查看响应状态和结果
print(response.status_code)
print(response.json())

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:52:29