Compare commits
2 Commits
7067c77714
...
b8e9dc2ae7
| Author | SHA1 | Date | |
|---|---|---|---|
| b8e9dc2ae7 | |||
| 2ee6a1aba3 |
127
Docs/Services/FastAPI/04-Post-Method.md
Normal file
127
Docs/Services/FastAPI/04-Post-Method.md
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
# FastAPI – POST Endpoint and JSON Input
|
||||||
|
|
||||||
|
This section demonstrates how to handle **POST requests** in FastAPI to create new resources using request data and return JSON responses.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example Application (POST Request)
|
||||||
|
|
||||||
|
Extend `main.py` with the following code:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from fastapi import FastAPI
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
users = [
|
||||||
|
{"name": "abbas", "age": 20},
|
||||||
|
{"name": "mmd", "age": 37},
|
||||||
|
{"name": "asghar", "age": 19},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/")
|
||||||
|
def home_page():
|
||||||
|
return {"msg": "API is working"}
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/new_user")
|
||||||
|
def create_user(name: str, age: int):
|
||||||
|
new_user = {"name": name, "age": age}
|
||||||
|
users.append(new_user)
|
||||||
|
return {"msg": "User created successfully"}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Code Overview
|
||||||
|
|
||||||
|
### POST Endpoint Definition
|
||||||
|
|
||||||
|
```python
|
||||||
|
@app.post("/new_user")
|
||||||
|
def create_user(name: str, age: int):
|
||||||
|
```
|
||||||
|
|
||||||
|
* Registers an HTTP **POST** endpoint at `/new_user`
|
||||||
|
* Accepts input parameters:
|
||||||
|
|
||||||
|
* `name` → string
|
||||||
|
* `age` → integer
|
||||||
|
* FastAPI automatically validates input types
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Creating a New Resource
|
||||||
|
|
||||||
|
```python
|
||||||
|
new_user = {"name": name, "age": age}
|
||||||
|
users.append(new_user)
|
||||||
|
```
|
||||||
|
|
||||||
|
* Constructs a new user object
|
||||||
|
* Appends it to the in-memory `users` list
|
||||||
|
* Simulates creating a record in a database
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### JSON Response
|
||||||
|
|
||||||
|
```python
|
||||||
|
return {"msg": "User created successfully"}
|
||||||
|
```
|
||||||
|
|
||||||
|
* Returns a structured JSON response
|
||||||
|
* Automatically serialized by FastAPI
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example Request
|
||||||
|
|
||||||
|
### Using `curl`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST "http://localhost:8000/new_user?name=ali&age=25"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Response
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"msg": "User created successfully"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verifying the Result
|
||||||
|
|
||||||
|
After creating a user, retrieve the updated list:
|
||||||
|
|
||||||
|
```http
|
||||||
|
GET /users
|
||||||
|
```
|
||||||
|
|
||||||
|
Response will now include the newly added user.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Running the Application
|
||||||
|
|
||||||
|
Start the FastAPI service using `uvicorn`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
uvicorn main:app --reload
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
* POST requests should be used to create resources
|
||||||
|
* Avoid modifying in-memory data in production environments
|
||||||
|
* Use request bodies with Pydantic models instead of query parameters for real APIs
|
||||||
|
* Return appropriate HTTP status codes (`201 Created`)
|
||||||
|
* Validate and sanitize all client-provided input
|
||||||
|
* Replace in-memory storage with persistent databases
|
||||||
|
|
||||||
Reference in New Issue
Block a user