Fastapi'de başka bir api'den api nasıl aranır?

Aug 19 2020

Bir API'nin yanıtını diğerinden alabildim ancak bir yerde depolayamadım (yanıtı döndürmeden önce bir dosyada veya başka bir yerde) response=RedirectResponse(url="/apiname/")(başlık ve gövde ile bir gönderi isteğine erişmek istiyorum)

Bu yanıt içeriğini iade etmeden saklamak istiyorum.

Evet, işlevi döndürürsem sonuçları alacağım ama yazdırdığımda sonuç bulamıyorum. Ayrıca gönderi isteği verirsem Varlık bulunamadı hatası alıyorum.

Starlette ve fastapi belgelerini okudum ama çözümü bulamadım. Geri aramalar da yardımcı olmadı.

Yanıtlar

1 SudipKandel Aug 20 2020 at 14:59

Doğrudan fastapi / starlette kullanarak geri dönmeden yanıtı depolamanın yolunu tam olarak bulamadım . Ancak bu görevi tamamlamak için bir çözüm buldum.

  • Aynı şeyi uygulamaya çalışan insanlar için lütfen bu şekilde düşünün.
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')))

Daha iyi yaklaşımlar varsa lütfen bana bildirin.

TD Jan 28 2021 at 23:44

Aynı sorunu yaşıyorum ve üçüncü taraf API'yi async yöntemle çağırmam gerekiyordu. Bu yüzden birçok yolu denedim ve istekler-eşzamansız kitaplık ile çözüm geldim ve benim için çalışıyor.

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 ayrıca httpx kullandığı bu videoyu da kullanabilirsiniz