Files
python-doc/Docs/Services/FastAPI/13-Body-Post.md
2026-01-23 16:26:18 +03:30

2.9 KiB
Raw Blame History

FastAPI POST Requests with JSON Body (Body)

This document demonstrates how to receive data from the request body using Body() in FastAPI. This approach is commonly used when clients send JSON payloads.


Example Application

Create or update main.py with the following content:

from fastapi import FastAPI, Body, status
from fastapi.responses import JSONResponse

app = FastAPI()

users_db = [
    {"id": "1", "name": "radin", "password": "123"}
]


@app.post("/user/")
def get_user_from_body(
    target: int = Body(
        ...,
        embed=True,
        gt=0,
        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,
    )

JSON Body Overview

What Is a Request Body

The request body contains structured data sent by the client, most commonly as JSON.

Content-Type:

application/json

Request Format

Example JSON Payload

{
  "User ID": 1
}
  • embed=True requires the value to be wrapped inside a JSON object
  • The key name is controlled by the alias

Example Request Using curl

curl -X POST "http://localhost:8000/user/" \
  -H "Content-Type: application/json" \
  -d '{"User ID": 1}'

Response Examples

Success Response

{
  "msg": "Your target user name is radin"
}

Status Code: 200 OK


Failure Response

{
  "msg": "user not found"
}

Status Code: 404 Not Found


Body() Parameter Configuration

Body(
    ...,
    embed=True,
    gt=0,
    alias="User ID",
    description="Enter target unique ID"
)
Parameter Purpose
... Field is required
embed=True Wraps the value in a JSON object
gt=0 Validates input value
alias Custom JSON key name
description Shown in API documentation

Swagger / OpenAPI Behavior

  • JSON schema is automatically generated
  • Validation errors are returned if rules are violated
  • Aliases and descriptions appear in Swagger UI
  • Request body is clearly documented

Running the Application

Start the service using uvicorn:

uvicorn main:app --reload

Best Practices

  • Prefer request body over query parameters for POST requests
  • Use Pydantic models instead of raw Body() for complex payloads
  • Keep JSON structures consistent
  • Avoid spaces in JSON keys for production APIs
  • Never send sensitive data in plain text
  • Use HTTPS for all JSON-based APIs