I have a simple application below:
from typing import Annotated
import uvicorn
from fastapi import FastAPI, Query, Depends
from pydantic import BaseModel
app = FastAPI()
class Input(BaseModel):
a: Annotated[str, Query(..., alias="your_name")]
@app.get("/")
def test(inp: Annotated[Input, Depends()]):
return f"Hello {inp.a}"
def main():
uvicorn.run("run:app", host="0.0.0.0", reload=True, port=8001)
if __name__ == "__main__":
main()
curl "http://127.0.0.1:8001/?your_name=amin"
returns "Hello amin"
I now change the alias from your_name
to your-name
.
from typing import Annotated
import uvicorn
from fastapi import FastAPI, Query, Depends
from pydantic import BaseModel
app = FastAPI()
class Input(BaseModel):
a: Annotated[str, Query(..., alias="your-name")]
@app.get("/")
def test(inp: Annotated[Input, Depends()]):
return f"Hello {inp.a}"
def main():
uvicorn.run("run:app", host="0.0.0.0", reload=True, port=8001)
if __name__ == "__main__":
main()
Then curl "http://127.0.0.1:8001/?your-name=amin"
returns:
{"detail":[{"loc":["query","extra_data"],"msg":"field required","type":"value_error.missing"}]}
However, hyphened alias in a simpler application is allowed.
from typing import Annotated
import uvicorn
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/")
def test(a: Annotated[str, Query(..., alias="your-name")]):
return f"Hello {a}"
def main():
uvicorn.run("run:app", host="0.0.0.0", reload=True, port=8001)
if __name__ == "__main__":
main()
curl "http://127.0.0.1:8001/?your-name=amin"
returns "Hello Amin"
Is this a bug? what is the problem here?