fastapi doc : added Query Adavaned Param
This commit is contained in:
184
Docs/Services/FastAPI/10-Query-Auth.md
Normal file
184
Docs/Services/FastAPI/10-Query-Auth.md
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
Reference in New Issue
Block a user