Mindaugas Jaraminas
Mindaugas Jaraminas

Reputation: 3447

How to hide input param in FastApi?

How to hide the request param in OpenApi? I would like to hide user_agent from OpenApi UI.

I have a simple app:

from typing import Optional
from fastapi import FastAPI, Header

app = FastAPI()
   
@app.get("/items/")
async def read_items(
       user_agent: Optional[str] = Header(None), 
       size: Optional[int] = Body(None)):
    return {"User-Agent": user_agent}

Upvotes: 6

Views: 9018

Answers (2)

illagrenan
illagrenan

Reputation: 6565

FastAPI in version 0.73.0 (related PR) supports this functionality natively: https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi.

from typing import Optional

from fastapi import Body, FastAPI, Header

app = FastAPI()


@app.get("/items/")
async def read_items(
    user_agent: Optional[str] = Header(None, include_in_schema=False), 
    size: Optional[int] = Body(None)
):
    return {"User-Agent": user_agent}

User-Agent header is excluded

Upvotes: 8

alex_noname
alex_noname

Reputation: 32283

You can customize OpenAPI schema for hiding arbitrary parameters. The example below hidesparamB:

from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi

app = FastAPI()


@app.get("/")
def get_items(paramA: int, paramB: int):
    pass


def custom_openapi():
    if app.openapi_schema:
        return app.openapi_schema
    openapi_schema = get_openapi(
        title="Custom title",
        version="2.5.0",
        description="This is a very custom OpenAPI schema",
        routes=app.routes,
    )
    # Remove paramB
    params = openapi_schema["paths"]["/"]["get"]["parameters"]
    params = [param for param in params if param["name"] != "paramB"]
    openapi_schema["paths"]["/"]["get"]["parameters"] = params
    app.openapi_schema = openapi_schema
    return app.openapi_schema


app.openapi = custom_openapi

Upvotes: 1

Related Questions