¿Cómo llamar a una api desde otra api en fastapi?
Pude obtener la respuesta de una API de otra pero no pude almacenarla en algún lugar (en un archivo o algo así antes de devolver la respuesta) response=RedirectResponse(url="/apiname/")
(Quiero acceder a una solicitud de publicación con encabezado y cuerpo)
Quiero almacenar este contenido de respuesta sin devolverlo.
Sí, si devuelvo la función obtendré los resultados pero cuando la imprimo no encuentro resultados. Además, si doy una solicitud de publicación, aparece el error Entidad no encontrada.
Leí los documentos de starlette y fastapi pero no pude obtener la solución. Las devoluciones de llamadas tampoco ayudaron.
Respuestas
No obtuve exactamente la forma de almacenar la respuesta sin regresar usando fastapi/starlette directamente. Pero encontré una solución para completar esta tarea.
- Para las personas que intentan implementar lo mismo, consideren de esta manera.
import requests
def test_function(request: Request, path_parameter: path_param):
request_example = {"test" : "in"}
host = request.client.host
data_source_id = path_parameter.id
get_test_url= f"http://{host}/test/{id}/"
get_inp_url = f"http://{host}/test/{id}/inp"
test_get_response = requests.get(get_test_url)
inp_post_response = requests.post(get_inp_url , json=request_example)
if inp_post_response .status_code == 200:
print(json.loads(test_get_response.content.decode('utf-8')))
Por favor, hágamelo saber si hay mejores enfoques.
Tengo el mismo problema y necesitaba llamar a la API de terceros de forma asíncrona . Así que probé de muchas maneras y encontré una solución con la biblioteca de solicitudes asíncronas y funciona para mí.
import http3
client = http3.AsyncClient()
async def call_api(url: str):
r = await client.get(url)
return r.text
@app.get("/")
async def root():
...
result_1 = await call_api('url_1')
result_2 = await call_api('url_2')
...
httpx también puedes usar este video que está usando httpx