Bagaimana cara memanggil api dari api lain di fastapi?
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
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.
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