Как передать список в запрос к fastapi?

Рейтинг: 0Ответов: 1Опубликовано: 10.01.2023

Как передать массив в функцию? Строку разобрался как передавать, а массив не получается

from fastapi import FastAPI
app = FastAPI()
@app.post('/api/test/')
def get_test(queries: list):
    return queries

Получаю ошибку

введите сюда описание изображения

в логах

INFO:     127.0.0.1:55807 - "POST /api/test/ HTTP/1.1" 307 Temporary Redirect
INFO:     127.0.0.1:55807 - "POST /api/test HTTP/1.1" 422 Unprocessable Entity

Ответы

▲ 3Принят

Через запрос GET (по мотивам примера из документации Query parameter list / multiple values):

from fastapi import FastAPI, Query
app = FastAPI()
@app.get('/api/test/')
def get_test(queries: list = Query()):
    return queries

Запрос:

curl -X GET "http://localhost:8000/api/test/?queries=1&queries=2&queries=3"

Ответ:

["1","2","3"]

На мой взгляд, для передачи на сервер чего-то более сложного чем одиночные строки или числа (в принципе, когда семантически (по смыслу) нам нужно что-то передать, а не получить (get)) лучше использовать POST или PUT запросы, тогда и данные можно будет передать в теле запроса в виде JSON.

from fastapi import FastAPI
app = FastAPI()
@app.post('/api/test/')
def get_test(queries: list):
    return queries

Запрос:

curl -X POST "http://localhost:8000/api/test/" -H "Content-Type: application/json" -d "[1,2,3]"

Ответ:

[1,2,3]