首頁 > 後端開發 > Python教學 > httpx 如何增強 FastAPI 中安全且有效率的下游 HTTP 請求?

httpx 如何增強 FastAPI 中安全且有效率的下游 HTTP 請求?

Linda Hamilton
發布: 2024-12-07 17:27:15
原創
979 人瀏覽過

How Can httpx Enhance Safe and Efficient Downstream HTTP Requests in FastAPI?

使用httpx 在FastAPI 中安全地發出下游HTTP 請求

當使用標準Python 請求庫在FastAPI 中發出HTTP 請求時,執行緒安全性成為並發請求中的一個問題。要有效解決此問題,請考慮使用 httpx,這是一個既提供線程安全性又提高效能的程式庫。

使用 httpx 非同步 API

httpx 附帶非同步 API,讓您可以輕鬆地HTTP 請求同時高效處理多個並發任務。以下是它在FastAPI 端點中的使用範例:

from httpx import AsyncClient
from fastapi import FastAPI, Request

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    app.state.client = AsyncClient()

@app.on_event('shutdown')
async def shutdown_event():
    await app.state.client.aclose()

@app.get('/')
async def home(request: Request):
    client = request.state.client
    req = client.build_request('GET', 'https://www.example.com')
    r = await client.send(req, stream=True)
    return StreamingResponse(r.aiter_raw(), background=BackgroundTask(r.aclose))
登入後複製

在此範例中:

  • startup_event() 在應用程式的狀態中初始化並儲存共用的httpx AsyncClient 。
  • shutdown_event() 在申請時優雅地關閉客戶端shutdown。
  • home() 使用共用用戶端向 https://www.example.com 執行 HTTP 要求,利用串流傳輸來有效處理大型回應。

使用httpx 同步 API

如果不需要使用 async def 定義端點,則有必要選擇 httpx 的同步 API。這種方法維護了執行緒安全性並簡化了端點實作:

from httpx import Client
from fastapi import FastAPI, Request

app = FastAPI()

@app.on_event("startup")
def startup_event():
    app.state.client = Client()

@app.on_event('shutdown')
async def shutdown_event():
    await app.state.client.aclose()

@app.get('/')
def home(request: Request):
    client = request.state.client
    req = client.build_request('GET', 'https://www.example.com')
    try:
        r = client.send(req)
        content_type = r.headers.get('content-type')
    except Exception as e:
        content_type = 'text/plain'
        e = str(e)

    if content_type == 'application/json':
        return r.json()
    elif content_type == 'text/plain':
        return PlainTextResponse(content=r.text)
    else:
        return Response(content=r.content)
登入後複製

在此範例中,同步API 在try/ except 區塊中處理HTTP 請求,從而允許優雅地處理請求期間可能出現的任何異常。

其他功能和注意事項

  • 非同步 API優點:非同步 API 提供卓越的效能,並且可以透過並發請求更有效地擴展。
  • 串流回應:在處理請求或回應中的大量資料時使用串流回應。
  • 控制連線池:您可以透過在建立httpx時設定limits參數來最佳化連線池的使用
  • 執行緒安全: httpx 被設計為線程安全的,確保跨多個線程可靠執行。

透過利用 httpx 及其功能,您可以自信地在 FastAPI 中發出下游 HTTP 請求,無縫處理多個並發任務並確保應用程式穩定性。

以上是httpx 如何增強 FastAPI 中安全且有效率的下游 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板