fastapi의 다른 API에서 API를 호출하는 방법은 무엇입니까?

Aug 19 2020

한 API의 응답을 다른 API에서 얻을 수 있었지만 어딘가에 저장할 수 없었습니다 (응답을 반환하기 전에 파일이나 다른 곳에) response=RedirectResponse(url="/apiname/")(헤더와 본문이있는 게시물 요청에 액세스하고 싶습니다)

이 응답 내용을 반환하지 않고 저장하고 싶습니다.

예, 함수를 반환하면 결과를 얻을 수 있지만 인쇄 할 때 결과를 찾을 수 없습니다. 또한 게시 요청을하면 Entity not found 오류가 발생합니다.

starlette 및 fastapi 문서를 읽었지만 해결 방법을 얻지 못했습니다. 콜백도 도움이되지 않았습니다.

답변

1 SudipKandel Aug 20 2020 at 14:59

fastapi / starlette를 사용하여 직접 반환하지 않고 응답을 저장하는 방법을 정확히 얻지 못했습니다 . 하지만이 작업을 완료하기위한 해결 방법을 찾았습니다.

  • 똑같은 것을 구현하려는 사람들을 위해이 방법을 고려하십시오.
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')))

더 나은 접근 방법이 있으면 알려주십시오.

TD Jan 28 2021 at 23:44

나는 똑같은 문제가 있고 비동기 방식으로 타사 API를 호출해야했습니다. 그래서 여러 가지 방법을 시도했으며 요청 비동기 라이브러리로 솔루션을 얻었 으며 저에게 효과적입니다.

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 또한 그가 httpx를 사용하고있는 이 비디오 를 사용할 수 있습니다.