iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Modern Web

FastAPI 入門30天系列 第 24

Day-24 非同步網路請求

  • 分享至 

  • xImage
  •  

前一章節我們介紹了非同步的 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

那我們知道怎麼用之後就可以將其寫成可以在 FastAPI 中的業務邏輯。

service

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

我們直接將其寫成一個函式,並回傳回應的文字。

router

@app.get(
    "/google"
)
async def get_google_response():
    return await service.get_google_response()

router 的地方就可以直接取得該網路通訊資料並回傳給使用者,記得我們在使用時要包裝成 async 的函式。

小結

今天算是教大家使用 httpx 的其中一個方式而已,這個套件可以發出同步和非同步的請求,今天主要是要講解非同步怎麼使用,對於網路通訊這種需要等待時間的要求時,我們就可以使用非同步的方式來執行。

參考資料

HTTPX (python-httpx.org)


上一篇
Day-23 非同步的 database
下一篇
Day-25 WebSocket 接口
系列文
FastAPI 入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言