A response builder for FastAPI.
Install this package as a dependency in the project:
This package requires
fastapito be installed.
# pip
pip install jder-fastapi
# uv
uv add jder-fastapi
# Pixi
pixi add --pypi jder-fastapiTo create a JSON response without data, just use createJsonResponse function:
from fastapi import FastAPI
from fastapi.responses import Response
from jder_fastapi.responses.json import createJsonResponse
app: FastAPI = FastAPI()
@app.get("/")
async def route() -> Response:
return createJsonResponse()And the response will be shown as below:
{
"success": true,
"data": null,
"errors": []
}The createJsonResponse function can also be used to insert data to the response:
from fastapi import FastAPI
from fastapi.responses import Response
from jder_fastapi.responses.json import (
createJsonResponse,
createJsonSuccessResponseOptions,
)
app: FastAPI = FastAPI()
@app.get("/")
async def route() -> Response:
return createJsonResponse(
options=createJsonSuccessResponseOptions(
data="Hello, World!",
),
)And the response will be shown as below:
{
"success": true,
"data": "Hello, World!",
"errors": []
}To create a failure JSON response, add error field to the options:
from fastapi import FastAPI
from fastapi.responses import Response
from jder_fastapi.responses.json import (
createJsonResponse,
createJsonFailureResponseOptions,
JsonResponseError,
)
app: FastAPI = FastAPI()
@app.get("/")
async def route() -> Response:
return createJsonResponse(
options=createJsonFailureResponseOptions(
status=500,
errors=[
JsonResponseError(
code="server",
),
],
),
)And the response will be shown as below:
{
"success": false,
"data": null,
"errors": [
{
"code": "server",
"path": [],
"message": null
}
]
}To combine additional headers from the response, add response to the function:
from fastapi import FastAPI
from fastapi.responses import Response
from jder_fastapi.responses.json import (
createJsonResponse,
createJsonSuccessResponseOptions,
)
app: FastAPI = FastAPI()
@app.get("/")
async def route(res: Response) -> Response:
res.headers["X-Test"] = "Hello, World!"
return createJsonResponse(
res,
createJsonSuccessResponseOptions(
data="Hello, World!",
),
)To create a non-JSON response, use createResponse function:
from fastapi import FastAPI
from fastapi.responses import Response
from jder_fastapi.responses import (
createResponse,
createResponseOptions,
)
app: FastAPI = FastAPI()
@app.get("/")
async def route() -> Response:
return createResponse(
options=createResponseOptions(
status=404,
headers={
"Content-Type": "text/plain",
},
body="Not Found",
),
)Enforce a validation exception handler to return a JSON response:
from fastapi import FastAPI
from fastapi.requests import Request
from fastapi.responses import Response
from fastapi.exceptions import RequestValidationError
from jder_fastapi.handlers import request_validation_exception_handler
app: FastAPI = FastAPI()
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(
req: Request,
exc: RequestValidationError
) -> Response:
return request_validation_exception_handler(req, exc)