前一章節我們介紹了非同步的 database 連線,那對於網路請求我們也可以使用非同步的方式,讓我們在存取第三方 API 或是與其他微服務串接時能夠提升效能。
pip install httpx
我們平常 python 中發出同步的請求時最常使用的是 requests 這個套件,那非同步的話我們可以使用 httpx 這個套件,他也是我們 fastapi 的網路通訊底層。
from httpx import AsyncClient
async with AsyncClient() as client:
response = await client.get("https://www.google.com")
我們可以使用該套件中的 AsyncClient 搭配 context manager,在每次發出網路通訊時,實體化一個 Client 端,接著就可以在該區塊使用其發出請求。
response = await client.post(url, headers=headers, files=files, json=json)
在使用其他不同方法時也可以帶入各種參數,詳細內容可以看官方文件說明。
那我們知道怎麼用之後就可以將其寫成可以在 FastAPI 中的業務邏輯。
from httpx import AsyncClient
async def get_google_response():
async with AsyncClient() as client:
response = await client.get("https://www.google.com")
return response.text
我們直接將其寫成一個函式,並回傳回應的文字。
@app.get(
"/google"
)
async def get_google_response():
return await service.get_google_response()
router 的地方就可以直接取得該網路通訊資料並回傳給使用者,記得我們在使用時要包裝成 async 的函式。
今天算是教大家使用 httpx 的其中一個方式而已,這個套件可以發出同步和非同步的請求,今天主要是要講解非同步怎麼使用,對於網路通訊這種需要等待時間的要求時,我們就可以使用非同步的方式來執行。