← Назад к вопросам

Как передать данные в POST?

1.3 Junior🔥 62 комментариев
#API и интеграции

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как передать данные в POST запросе

POST метод предназначен для отправки данных на сервер. Существует несколько способов передачи данных в теле POST запроса.

1. JSON — Рекомендуемый подход

JSON это современный формат для передачи структурированных данных в REST API.

Пример с curl:

curl -X POST https://api.example.com/users -H "Content-Type: application/json" -d '{"name": "John", "email": "john@example.com"}'

В Python:

import requests
data = {"name": "John", "email": "john@example.com", "age": 30}
response = requests.post("https://api.example.com/users", json=data)

На сервере (FastAPI):

from pydantic import BaseModel
class User(BaseModel):
    name: str
    email: str
    age: int

@app.post("/users")
def create_user(user: User):
    return {"status": "created", "user": user}

Преимущества JSON:

  • Структурированные данные
  • Поддерживает вложенные объекты
  • Стандарт для современных API
  • Компактный формат

2. Form Data (application/x-www-form-urlencoded)

Простые данные в формате ключ=значение.

Пример:

curl -X POST https://api.example.com/login -d "username=john&password=secret123"

HTML форма:

<form method="POST" action="/login">
  <input type="text" name="username"/>
  <input type="password" name="password"/>
  <button type="submit">Вход</button>
</form>

Особенности:

  • Используется в HTML формах по умолчанию
  • Данные кодируются как: key1=value1&key2=value2
  • Не подходит для файлов

3. Multipart Form Data для файлов

Для передачи файлов вместе с данными.

Пример с curl:

curl -X POST https://api.example.com/upload -F "file=@image.jpg" -F "title=My Photo"

В Python:

files = {"file": open("image.jpg", "rb")}
data = {"title": "My Photo"}
response = requests.post("https://api.example.com/upload", files=files, data=data)

На сервере (FastAPI):

from fastapi import File, UploadFile, Form

@app.post("/upload")
def upload_file(file: UploadFile = File(...), title: str = Form(...)):
    return {"filename": file.filename, "title": title}

Когда использовать:

  • Передача файлов
  • Загрузка изображений
  • Отправка документов

4. Raw Body (Text/XML)

Для специальных форматов.

XML:

curl -X POST https://api.example.com/order -H "Content-Type: application/xml" -d "<?xml version=\"1.0\"?><order><item>Widget</item></order>"

5. Query Parameters в URL

Данные в адресной строке (для простых случаев):

curl -X POST "https://api.example.com/search?query=python&limit=10"

ОСТОРОЖНО: query параметры видны в URL. Никогда не передавай пароли и токены в URL!

Content-Type Header

Критически важно указывать правильный Content-Type.

Для JSON:

-H "Content-Type: application/json"

Для Form Data:

-H "Content-Type: application/x-www-form-urlencoded"

Для файлов:

-H "Content-Type: multipart/form-data"

Без правильного Content-Type сервер может неправильно парсировать данные или вернуть 400 Bad Request.

Сравнение форматов

ФорматФайлыСложностьКогда использовать
JSONНетСредняяREST API
Form DataНетНизкаяHTML формы
MultipartДаСредняяЗагрузка файлов
XMLДаСредняяLegacy системы
Raw TextНетНизкаяЛоги

Best Practices

  1. Используй JSON для REST API
  2. Всегда указывай Content-Type
  3. Валидируй данные на сервере
  4. Не передавай чувствительные данные в query параметрах
  5. Ограничивай размер тела запроса
  6. Логируй входящие данные (без паролей)

Типичный REST API

from fastapi import FastAPI
from pydantic import BaseModel

class User(BaseModel):
    name: str
    email: str
    age: int

@app.post("/api/v1/users")
def create_user(user: User):
    return {"status": "created", "user": user}

Значение для System Analyst

System Analyst должен:

  • Выбирать подходящий формат для передачи данных
  • Определять Content-Type для каждого эндпоинта
  • Планировать передачу файлов
  • Обеспечивать валидацию и безопасность
  • Документировать формат запросов в API
Как передать данные в POST? | PrepBro