Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Log Permintaan/Respons HTTP Mentah dengan Cekap dalam FastAPI untuk Pengauditan?

Bagaimanakah Saya Boleh Log Permintaan/Respons HTTP Mentah dengan Cekap dalam FastAPI untuk Pengauditan?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 20:20:11331semak imbas

How Can I Efficiently Log Raw HTTP Request/Response JSON in FastAPI for Auditing?

Melog Permintaan/Respons HTTP Mentah dalam Python FastAPI untuk Laluan Tertentu

Masalah:
Kami sedang membangunkan perkhidmatan web menggunakan FastAPI yang akan digunakan dalam Kubernetes. Untuk tujuan pengauditan, kami perlu merekodkan badan JSON mentah permintaan dan respons laluan tertentu. Badan JSON permintaan dan tindak balas bersaiz kira-kira 1MB, dan adalah penting bahawa proses pengelogan tidak menjejaskan masa tindak balas dengan ketara.

Penyelesaian:

Pilihan 1: Menggunakan Middleware

  1. Buat Middleware:
    Tentukan fungsi dan gunakan penghias @app.middleware("http") untuk mengendalikan permintaan masuk dan respons keluar.
  2. Isi Permintaan Tangkap:
    Gunakan request.body() atau request.stream() untuk menangkap kandungan permintaan.
  3. Proses Badan Respons:
    Baca badan respons sebagai objek bait dan kembalikan Respons tersuai kepada klien.
  4. Data Log:
    Gunakan BackgroundTask untuk log badan permintaan dan respons kepada fail atau pangkalan data.

Pilihan 2: Menggunakan Laluan API Tersuai Kelas

  1. Tentukan Laluan API Tersuai:
    Buat kelas APIRoute tersuai yang memanjangkan kelas asas APIRoute, membenarkan pengubahsuaian badan permintaan dan tindak balas.
  2. Kendalikan Badan Permintaan:
    Dalam pengendali laluan tersuai, tangkap permintaan badan sebelum ia mencapai pengendali titik akhir.
  3. Badan Tindak Balas Proses:
    Ubah suai badan tindak balas dan cipta objek Respons baharu. Jika respons asal ialah StreamingResponse, tambahkan fungsi pengelogan pada iterator penstriman.
  4. Pengelogan Latar Belakang:
    Lampirkan fungsi pengelogan sebagai BackgroundTask pada objek respons.

Nota:
Pertimbangkan saiz permintaan dan tindak balas badan, kerana muatan yang besar boleh membawa kepada masalah memori atau kelewatan pada kedua-dua bahagian pelayan dan klien. Anda mungkin perlu mengehadkan pengelogan kepada laluan tertentu atau mengecualikan respons penstriman daripada pengelogan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Log Permintaan/Respons HTTP Mentah dengan Cekap dalam FastAPI untuk Pengauditan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn