Come chiamare un'API da un'altra API in fastapi?
Sono stato in grado di ottenere la risposta di un'API da un'altra ma non sono riuscito a memorizzarla da qualche parte (in un file o qualcosa del genere prima di restituire la risposta) response=RedirectResponse(url="/apiname/")
(voglio accedere a una richiesta di post con intestazione e corpo)
Voglio memorizzare questo contenuto di risposta senza restituirlo.
Sì, se restituisco la funzione otterrò i risultati ma quando la stampo non trovo risultati. Inoltre, se fornisco una richiesta di posta, ottengo l'errore Entità non trovata.
Ho letto i documenti starlette e fastapi ma non sono riuscito a trovare la soluzione alternativa. Anche i callback non hanno aiutato.
Risposte
Non ho esattamente ottenuto il modo di memorizzare la risposta senza tornare usando direttamente fastapi/starlette . Ma ho trovato una soluzione alternativa per completare questa attività.
- Per le persone che cercano di implementare la stessa cosa, si prega di considerare in questo modo.
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')))
Per favore fatemi sapere se ci sono approcci migliori.
Ho lo stesso problema e avevo bisogno di chiamare l'API di terze parti in modo asincrono Quindi ho provato molti modi e ho trovato la soluzione con la libreria request-async e funziona per me.
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 puoi anche usare questo video che sta usando httpx