Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между POST и PUT
ПОСТ и PUT — это два разных HTTP метода, и хотя оба отправляют данные на сервер, они используются в совершенно разных сценариях.
POST — Создание нового ресурса
ПОСТ используется для отправки данных, которые изменяют состояние сервера. Обычно это создание нового ресурса.
import requests
# Создание новой записи
response = requests.post(
"https://api.example.com/users",
json={
"name": "Ivan Petrov",
"email": "ivan@example.com"
}
)
# Response: 201 Created
# {
# "id": 123,
# "name": "Ivan Petrov",
# "email": "ivan@example.com"
# }
Важные свойства POST:
- Не идемпотентен: несколько одинаковых запросов создадут несколько ресурсов
- Создает новый ресурс: каждый вызов добавляет что-то новое
- Обычно возвращает 201 Created или 200 OK
- URL обычно указывает коллекцию (/users), а не конкретный ресурс
PUT — Полное обновление существующего ресурса
ПУТ используется для замены (обновления) существующего ресурса целиком.
# Полное обновление существующего пользователя
response = requests.put(
"https://api.example.com/users/123",
json={
"name": "Ivan Sidorov",
"email": "ivan.new@example.com"
}
)
# Response: 200 OK или 204 No Content
Важные свойства PUT:
- Идемпотентен: несколько одинаковых запросов дадут одинаковый результат
- Полная замена: отправляет полный объект, не частичное обновление
- URL указывает конкретный ресурс: /users/123
- Обычно возвращает 200 OK или 204 No Content
Практический пример: различие
# === POST ===
# Запрос 1: Создаем новый пост
response1 = requests.post(
"https://api.example.com/posts",
json={"title": "My Post", "content": "Hello"}
)
print(response1.json()) # {"id": 1, "title": "My Post", ...}
# Запрос 2: Повторяем тот же запрос
response2 = requests.post(
"https://api.example.com/posts",
json={"title": "My Post", "content": "Hello"}
)
print(response2.json()) # {"id": 2, "title": "My Post", ...}
# Создались ДВА разных поста!
# === PUT ===
# Запрос 1: Обновляем пост с id=1
response1 = requests.put(
"https://api.example.com/posts/1",
json={"title": "Updated Title", "content": "Updated Content"}
)
print(response1.json()) # {"id": 1, "title": "Updated Title", ...}
# Запрос 2: Повторяем тот же запрос
response2 = requests.put(
"https://api.example.com/posts/1",
json={"title": "Updated Title", "content": "Updated Content"}
)
print(response2.json()) # {"id": 1, "title": "Updated Title", ...}
# Пост остался БЕЗ ИЗМЕНЕНИЙ (идемпотентно)
PATCH — Частичное обновление
Есть также PATCH — для частичного обновления:
# Обновляем только название, email остается прежним
response = requests.patch(
"https://api.example.com/users/123",
json={"name": "New Name"} # Только это поле
)
Сравнительная таблица
| Свойство | POST | PUT | PATCH |
|---|---|---|---|
| Создание новой записи | Да | Нет | Нет |
| Обновление существующей | Нет | Да | Да |
| Идемпотентность | Нет | Да | Обычно нет |
| Требует ID ресурса | Нет | Да | Да |
| Полное обновление | N/A | Да | Нет |
| Код ответа | 201/200 | 200/204 | 200/204 |
Правила использования в REST API
# POST — создание
POST /api/v1/users # Создать пользователя
POST /api/v1/users/123/comments # Создать комментарий к пользователю
# GET — получение
GET /api/v1/users # Получить всех
GET /api/v1/users/123 # Получить одного
# PUT — полное обновление
PUT /api/v1/users/123 # Обновить всего пользователя
# PATCH — частичное обновление
PATCH /api/v1/users/123 # Обновить части пользователя
# DELETE — удаление
DELETE /api/v1/users/123 # Удалить пользователя
Резюме
Используй POST когда нужно создать новую запись и каждый запрос должен создавать новую.
Используй PUT когда нужно обновить существующую запись полностью и операция должна быть идемпотентной.
Используй PATCH когда нужно обновить только некоторые поля существующей записи.