Sobes.tech
Back to questions
Middle
6

import fastapi import requests app = fastapi.FastAPI() @app.get() def get_posts(first_n, custom_ids: list = []): ids = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] posts = [None for i in range(first_n)] i = 0 for post_id in (custom_ids or ids[:first_n]): url = f"[link] response = requests.get(url, verify=False) posts[i] = response.json() return posts

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

В представленном коде есть несколько проблем и неточностей:

  1. Декоратор @app.get() требует указания пути, например @app.get("/posts").
  2. Параметры функции должны быть аннотированы с типами и по возможности с дефолтными значениями для FastAPI.
  3. Параметр custom_ids: list = [] лучше заменить на custom_ids: Optional[List[int]] = None, чтобы избежать мутабельных дефолтных аргументов.
  4. В цикле используется (custom_ids or ids[:first_n]), но если custom_ids пустой список, он будет проигнорирован, что может быть неочевидно.
  5. Отступы в коде нарушены, return posts должен быть внутри функции.
  6. Запросы к внешнему URL выполняются синхронно, что может замедлить работу API.

Пример исправленного варианта с использованием FastAPI и асинхронных запросов через httpx:

from fastapi import FastAPI, Query
from typing import List, Optional
import httpx

app = FastAPI()

ids = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

@app.get("/posts")
async def get_posts(first_n: int = 5, custom_ids: Optional[List[int]] = Query(None)):
    selected_ids = custom_ids if custom_ids else ids[:first_n]
    posts = []
    async with httpx.AsyncClient(verify=False) as client:
        for post_id in selected_ids:
            url = f"https://example.com/posts/{post_id}"
            response = await client.get(url)
            posts.append(response.json())
    return posts

Такой подход улучшит читаемость, корректно обработает параметры и повысит производительность за счет асинхронных запросов.