"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > विशिष्ट फास्टएपीआई मार्गों के लिए त्रुटि प्रतिक्रियाओं को कैसे अनुकूलित करें?

विशिष्ट फास्टएपीआई मार्गों के लिए त्रुटि प्रतिक्रियाओं को कैसे अनुकूलित करें?

2024-12-21 को प्रकाशित
ब्राउज़ करें:595

How to Customize Error Responses for Specific FastAPI Routes?

FastAPI में एक विशिष्ट रूट के लिए त्रुटि प्रतिक्रिया को कैसे अनुकूलित करें

FastAPI में, एक RequestValidationError बढ़ाने से आप एक कस्टम त्रुटि प्रतिक्रिया भेज सकते हैं। यह उन अंतिम बिंदुओं के लिए उपयोगी है जिनके लिए विशिष्ट शर्तों को पूरा करना आवश्यक है, जैसे कि आवश्यक हेडर।

विकल्प 1: डिफ़ॉल्ट अपवाद हैंडलर को ओवरराइड करें

यह विकल्प आपको डिफ़ॉल्ट अपवाद हैंडलर को ओवरराइड करने की अनुमति देता है RequestValidationError, आपको त्रुटि प्रतिक्रिया को अनुकूलित करने की अनुमति देता है।

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

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:
        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}),
    )

विकल्प 2: एक उप-एप्लिकेशन का उपयोग करें

एक उप-एप्लिकेशन बनाने से आप अपने स्वयं के अपवाद हैंडलर के साथ एक अलग एपीआई इंस्टेंस बना सकते हैं। यह आपको विशेष रूप से उप-एप्लिकेशन के लिए त्रुटि प्रबंधन को अनुकूलित करने की अनुमति देता है।

from fastapi import FastAPI
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse

app = FastAPI()
subapi = FastAPI()

@subapi.exception_handler(RequestValidationError)
async def validation_exception_handler(exc: RequestValidationError):
    return JSONResponse(content={'401': 'Unauthorized'}, status_code=401)
    
@subapi.get('/')
async def subapi_route(some_custom_header: str = Header(...)):
    return {'some-custom-header': some_custom_header}

app.mount('/sub', subapi)

विकल्प 3: एक कस्टम APIRoute क्लास का उपयोग करें

यह विधि आपको कस्टम APIRoute क्लास का उपयोग करके एक विशिष्ट मार्ग के व्यवहार को बदलने की अनुमति देती है।

from fastapi import FastAPI, APIRouter, Response, Request, Header, HTTPException
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')

        return custom_route_handler

app = FastAPI()
router = APIRouter(route_class=ValidationErrorHandlingRoute)

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

app.include_router(router)

आपको किस विकल्प का उपयोग करना चाहिए?

विकल्प 1 को लागू करना आसान है जब आपको केवल विशिष्ट मार्गों के लिए त्रुटि प्रतिक्रिया को अनुकूलित करने की आवश्यकता होती है। विकल्प 2 तब उपयुक्त है जब आप अपने एपीआई के उप-क्षेत्र पर अधिक नियंत्रण चाहते हैं, जैसे विभिन्न सुरक्षा नीतियों को लागू करना या अपवाद प्रबंधन। विकल्प 3 आपको अलग-अलग मार्गों पर अधिक नियंत्रण देता है और एक मार्ग के भीतर विशिष्ट मामलों को संभालने के लिए उपयोगी है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3