Files
python-doc/Docs/Services/FastAPI/10-Query-Auth.md
2026-01-22 23:53:01 +03:30

185 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FastAPI Advanced Query Parameters (`Query`)
This document demonstrates how to configure **query parameters** in FastAPI using `Query()` to add:
* Aliases
* Descriptions (for API documentation)
* Deprecation warnings
* Validation and metadata
It also shows how these configurations appear in the **OpenAPI / Swagger UI**.
---
## Example Application
Create or update `main.py` with the following content:
```python
from fastapi import FastAPI, Query, status
from fastapi.responses import JSONResponse
app = FastAPI()
users_db = [
{"id": "1", "name": "radin"}
]
@app.get("/user/")
def get_user_deprecated(
target: int | None = Query(
default=None,
alias="User ID",
description="Enter target unique ID",
deprecated=True,
)
):
for item in users_db:
if int(item["id"]) == target:
return JSONResponse(
content={"msg": f"Your target user name is {item['name']}"},
status_code=status.HTTP_200_OK,
)
return JSONResponse(
content={"msg": "user not found"},
status_code=status.HTTP_404_NOT_FOUND,
)
@app.get("/user")
def get_user(
target: int | None = Query(
default=None,
alias="User ID",
description="Enter target unique ID",
)
):
for item in users_db:
if item["id"] == str(target):
return JSONResponse(
content={"msg": f"Your target user name is {item['name']}"},
status_code=status.HTTP_200_OK,
)
return JSONResponse(
content={"msg": "user not found"},
status_code=status.HTTP_404_NOT_FOUND,
)
```
---
## Query Parameter Configuration
### `Query()` Parameters Used
```python
Query(
default=None,
alias="User ID",
description="Enter target unique ID",
deprecated=True
)
```
| Parameter | Purpose |
| ------------- | ------------------------------------------- |
| `default` | Makes the query parameter optional |
| `alias` | Changes the query parameter name in the URL |
| `description` | Appears in Swagger UI documentation |
| `deprecated` | Marks the parameter as deprecated |
---
## Example Requests
### Using Alias in Query String
```http
GET /user?User%20ID=1
```
---
## Endpoint Behavior
### Deprecated Endpoint
```http
GET /user/
```
* Query parameter is marked as **deprecated**
* Swagger UI displays a warning
* Useful for backward compatibility
---
### Active Endpoint
```http
GET /user
```
* Uses the same alias and description
* Recommended for active usage
---
## Response Examples
### Success Response
```json
{
"msg": "Your target user name is radin"
}
```
Status Code: **200 OK**
---
### Failure Response
```json
{
"msg": "user not found"
}
```
Status Code: **404 Not Found**
---
## Swagger / OpenAPI Integration
* Alias appears as the query parameter name
* Description is visible in API docs
* Deprecated parameters are clearly marked
* Improves API discoverability and usability
---
## Running the Application
Start the service using `uvicorn`:
```bash
uvicorn main:app --reload
```
---
## Best Practices
* Use `Query()` for validation and documentation
* Avoid spaces in aliases for production APIs
* Deprecate parameters instead of removing them
* Keep backward compatibility during API evolution
* Prefer consistent parameter naming
* Use response models instead of manual `JSONResponse` when possible