Как вызвать конечную точку API из другой конечной точки API в том же приложении FastAPI?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как вызвать конечную точку API из другой конечной точки API в том же приложении FastAPI?

Сообщение Anonymous »

(Я нашел следующий вопрос в SO, но он мне не помог: возможно ли, чтобы API вызывал другой API, используя их оба в одном приложении?)
Я создаю приложение с помощью Fastapi со следующей структурой папок
Изображение
— точка входа в приложение

Код: Выделить всё

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from app.api.v1 import lines, upload
from app.core.config import settings

app = FastAPI(
title=settings.PROJECT_NAME,
version=0.1,
openapi_url=f'{settings.API_V1_STR}/openapi.json',
root_path=settings.ROOT_PATH
)

app.add_middleware(
CORSMiddleware,
allow_origins=settings.BACKEND_CORS_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)

app.include_router(upload.router, prefix=settings.API_V1_STR)
app.include_router(lines.router, prefix=settings.API_V1_STR)
В файлеlines.py у меня есть две конечные точки GET:
  • Код: Выделить всё

    /one-random-line
    --> возвращает случайную строку из файла .txt
  • Код: Выделить всё

    /one-random-line-backwards
    --> должен возвращать выходные данные /one-random-line
Поскольку выходные данные второй конечной точки GET должна быть перевернутой строкой вывода первой конечной точки GET, я попробовал выполнить следующие шаги, упомянутые здесь
Коды:

Код: Выделить всё

import random

from fastapi import APIRouter, Request
from starlette.responses import RedirectResponse

router = APIRouter(
prefix="/get-info",
tags=["Get Information"],
responses={
200: {'description': 'Success'},
400: {'description': 'Bad Request'},
403: {'description': 'Forbidden'},
500: {'description': 'Internal Server Error'}
}
)

@router.get('/one-random-line')
def get_one_random_line(request: Request):
lines = open('netflix_list.txt').read().splitlines()
if request.headers.get('accept') in ['application/json', 'application/xml']:
random_line = random.choice(lines)
else:
random_line = 'This is an example'
return {'line': random_line}

@router.get('/one-random-line-backwards')
def get_one_random_line_backwards():
url = router.url_path_for('get_one_random_line')
response = RedirectResponse(url=url)
return {'message': response[::-1]}
Когда я это делаю, я получаю следующую ошибку:

Код: Выделить всё

TypeError: 'RedirectResponse' object is not subscriptable
Когда я меняю возврат второй конечной точки GET на возврат {'message': ответ, я получаю следующий вывод
Изображение

В чем ошибка? занимаюсь?
Пример:
Если конечная точка /one-random-line выводит результат «Maverick», то вывод / one-random-line-backwards должно быть «kcirevam»

Подробнее здесь: https://stackoverflow.com/questions/733 ... fastapi-ap
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»