Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menyesuaikan Respons Ralat untuk Laluan Tertentu dalam FastAPI?

Bagaimanakah Saya Boleh Menyesuaikan Respons Ralat untuk Laluan Tertentu dalam FastAPI?

Barbara Streisand
Barbara Streisandasal
2024-11-22 16:18:20156semak imbas

How Can I Customize Error Responses for Specific Routes in FastAPI?

Menyesuaikan Respons Ralat untuk Laluan Tertentu dalam FastAPI

Ikhtisar

FastAPI [1](#sources) menyediakan platform serba boleh untuk ralat penyesuaian respons untuk laluan tertentu. Ini membolehkan pembangun menyesuaikan pengendalian ralat mengikut keperluan aplikasi tertentu. Dengan mengatasi pengendali pengecualian lalai atau menggunakan teknik lain seperti sub-aplikasi, seseorang boleh membuat respons ralat tersuai yang meningkatkan pengalaman pengguna dan memberikan maklum balas yang bermakna.

Pilihan 1: Gantikan Pengendali Pengecualian Lalai

Satu pendekatan melibatkan mengatasi pengendali pengecualian lalai untuk RequestValidationError. Pengecualian ini dibangkitkan apabila permintaan mengandungi data tidak sah. Dengan melaksanakan pengendali tersuai, anda boleh menyemak ralat khusus yang berkaitan dengan pengepala tersuai yang diperlukan anda dan mengembalikan tindak balas ralat tersuai.

from fastapi import FastAPI, Request, Header, status
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder

app = FastAPI()
routes_with_custom_exception = ['/']

@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
    if request.url.path in routes_with_custom_exception:
        # check whether the error relates to the `some_custom_header` parameter
        for err in exc.errors():
            if err['loc'][0] == 'header' and err['loc'][1] == 'some-custom-header':
                return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)
            
    return JSONResponse(
        status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
        content=jsonable_encoder({'detail': exc.errors(), 'body': exc.body}),
    )

Pilihan 2: Sub -Aplikasi

Alternatif lain melibatkan mewujudkan sub-aplikasi dan melekapkannya ke aplikasi utama. Ini membolehkan pengendalian ralat tersuai khusus untuk laluan dalam sub-aplikasi, tanpa menjejaskan laluan lain dalam aplikasi utama.

# main API
app = FastAPI()

# sub-application with custom error handling
subapi = FastAPI()
@subapi.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
    # Handle error specific to sub-application's routes
    return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)

# mount sub-application
app.mount('/sub', subapi)

Pilihan 3: Kelas Laluan API Tersuai

Pendekatan ini melibatkan penciptaan kelas APIRoute tersuai yang mengendalikan pengesahan permintaan dalam blok kecuali cuba. Jika RequestValidationError dibangkitkan, respons ralat tersuai boleh dikembalikan.

from fastapi import FastAPI, APIRouter, APIRoute, Request, Header, HTTPException
from fastapi.responses import JSONResponse
from fastapi.exceptions import RequestValidationError

class ValidationErrorHandlingRoute(APIRoute):
    def get_route_handler(self) -> Callable:
        original_route_handler = super().get_route_handler()

        async def custom_route_handler(request: Request) -> Response:
            try:
                return await original_route_handler(request)
            except RequestValidationError as e:
                raise HTTPException(status_code=401, detail='401 Unauthorized')

# create new router with custom error handling
router = APIRouter(route_class=ValidationErrorHandlingRoute)

# add custom error handling to router
@router.get('/custom')
async def custom_route(some_custom_header: str = Header(...)):
    return {'some-custom-header': some_custom_header}

# add router to app 
app.include_router(router)

Kesimpulan

Dengan meneroka teknik ini, pembangun boleh menyesuaikan respons ralat dalam FastAPI agar sesuai dengan keperluan khusus, memberikan lebih banyak pengalaman pengguna yang disesuaikan dan pengendalian ralat yang dipertingkatkan keupayaan.

Sumber

  1. [Dokumentasi FastAPI: Mengendalikan Pengecualian HTTP](https://fastapi.tiangolo.com/exception-handlers/)

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Respons Ralat untuk Laluan Tertentu dalam FastAPI?. 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