Bagaimana cara memanggil api dari api lain di fastapi?

Aug 19 2020

Saya bisa mendapatkan respons dari satu API dari yang lain tetapi tidak dapat menyimpannya di suatu tempat (dalam file atau sesuatu sebelum mengembalikan respons) response=RedirectResponse(url="/apiname/")(Saya ingin mengakses permintaan posting dengan header dan body)

Saya ingin menyimpan konten tanggapan ini tanpa mengembalikannya.

Ya, jika saya mengembalikan fungsi saya akan mendapatkan hasil tetapi ketika saya mencetaknya saya tidak menemukan hasil. Juga, jika saya memberikan permintaan posting maka saya mendapatkan kesalahan Entitas tidak ditemukan.

Saya membaca dokumen starlette dan fastapi tetapi tidak bisa mendapatkan solusi. Panggilan balik juga tidak membantu.

Jawaban

1 SudipKandel Aug 20 2020 at 14:59

Saya tidak benar-benar mendapatkan cara untuk menyimpan respons tanpa kembali menggunakan fastapi / starlette secara langsung. Tetapi saya menemukan solusi untuk menyelesaikan tugas ini.

  • For the people trying to implement same thing, Please consider this way.
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')))

Please let me know if there are better approaches.

TD Jan 28 2021 at 23:44

I have the same problem & I needed to call the third-party API with async way So I tried many ways & I came solution with requests-async library and it works for 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 also you can use this video he is using httpx