Fastapi'de başka bir api'den api nasıl aranır?
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
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.
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