pypiswagger95% confidence\u2191 28

Displaying of FastAPI validation errors to end users

Full error message
I'm looking for some library or example of code to format FastAPI validation messages into human-readable format. E.g. this endpoint:

@app.get("/")
async def hello(name: str):
    return {"hello": name}

Will produce the next json output if we miss name query parameter:

{ 
    "detail":[ 
        { 
            "loc":[ 
                "query",
                "name"
            ],
            "msg":"field required",
            "type":"value_error.missing"
        }
    ]
}

So my questions is, how to:

Transform it into something like "name field is required" (for all kinds of possible errors) to show in toasts.
Use it to display form validation messages
Generate forms themselves from api description if it's possible

FastAPI has a great Exception Handling, so you can customize your exceptions in many ways. You can raise an HTTPException, HTTPException is a normal Python exception with additional data relevant for APIs. But you can't return it you need to raise it because it's a Python exception from fastapi import HTTPException ... @app.get("/") async def hello(name: str): if not name: raise HTTPException(status_code=404, detail="Name field is required") return {"Hello": name} By adding name: str as a query parameter it automatically becomes required so you need to add Optional from typing import Optional ... @app.get("/") async def hello(name: Optional[str] = None): error = {"Error": "Name field is required"} if name: return {"Hello": name} return error $ curl 127.0.0.1:8000/?name=imbolc {"Hello":"imbolc"} ... $ curl 127.0.0.1:8000 {"Error":"Name field is required"} But in your case, and i think this is the best way to handling errors in FastAPI overriding the validation_exception_handler: from fastapi import FastAPI, Request, status from fastapi.encoders import jsonable_encoder from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse ... @app.exception_handler(RequestValidationError) async def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, content=jsonable_encoder({"detail": exc.errors(), "Error": "Name field is missing"}), ) ... @app.get("/") async def hello(name: str): return {"hello": name} You will get a response like this: $ curl 127.0.0.1:8000 { "detail":[ { "loc":[ "query", "name" ], "msg":"field required", "type":"value_error.missing" } ], "Error":"Name field is missing" } You can customize your content however if you like: { "Error":"Name field is missing", "Customize":{ "This":"content", "Also you can":"make it simpler" } }

API access

Get this solution programmatically \u2014 free, no authentication.

curl https://depscope.dev/api/error/bf74819b79f01d86eab086cac2f686ce3b43f9efe35dae443d840133559a3684
hash \u00b7 bf74819b79f01d86eab086cac2f686ce3b43f9efe35dae443d840133559a3684
Displaying of FastAPI validation errors to end users — DepScope fix | DepScope