← Назад к вопросам
В чем разница между методами HTTP запросов?
1.2 Junior🔥 191 комментариев
#REST API и HTTP
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между методами HTTP запросов
HTTP методы (глаголы) определяют типы действий, которые нужно выполнить с ресурсом на сервере. Каждый метод имеет свою семантику и правила использования.
GET — получение данных
Получает данные с сервера без изменения состояния:
import requests
# GET запрос
response = requests.get("https://api.example.com/users/123")
print(response.json())
Свойства:
- Безопасный (не изменяет данные)
- Идемпотентный (повторные вызовы дают одинаковый результат)
- Кэшируется
- Данные в URL (видны в адресной строке)
- Нет тела запроса
- Используется для чтения ресурсов
POST — создание ресурса
Создаёт новый ресурс на сервере:
# POST запрос
data = {"name": "Иван", "age": 30}
response = requests.post("https://api.example.com/users", json=data)
print(response.json()) # Возвращает созданный ресурс
Свойства:
- Не безопасный (изменяет данные)
- Не идемпотентный (повторные вызовы создадут новые ресурсы)
- Не кэшируется по умолчанию
- Данные в теле запроса
- Может вернуть 201 Created или 200 OK
- Используется для создания новых ресурсов
PUT — полное обновление ресурса
Заменяет весь ресурс полностью:
# PUT запрос
data = {"name": "Петр", "age": 35, "email": "petr@example.com"}
response = requests.put("https://api.example.com/users/123", json=data)
Свойства:
- Не безопасный (изменяет данные)
- Идемпотентный (повторные вызовы дают одинаковый результат)
- Требует полное описание ресурса
- Заменяет весь объект
- Возвращает 200 OK или 204 No Content
- Все поля должны быть предоставлены
PATCH — частичное обновление ресурса
Обновляет только переданные поля:
# PATCH запрос
data = {"age": 31} # Обновляем только возраст
response = requests.patch("https://api.example.com/users/123", json=data)
Свойства:
- Не безопасный (изменяет данные)
- Не идемпотентный
- Требует только поля для изменения
- Обновляет избирательно
- Возвращает 200 OK или 204 No Content
- Используется для минимальных изменений
DELETE — удаление ресурса
Удаляет ресурс с сервера:
# DELETE запрос
response = requests.delete("https://api.example.com/users/123")
print(response.status_code) # 204 No Content
Свойства:
- Не безопасный (изменяет данные)
- Идемпотентный (повторные вызовы безопасны)
- Удаляет ресурс
- Возвращает 204 No Content или 200 OK
- Тела ответа может не быть
HEAD — получение метаданных
Аналогичен GET, но без тела ответа:
# HEAD запрос
response = requests.head("https://api.example.com/users/123")
print(response.headers) # Только заголовки
Свойства:
- Безопасный
- Идемпотентный
- Возвращает только заголовки
- Нет тела ответа
- Быстрее, чем GET
OPTIONS — получение поддерживаемых методов
Узнаёт, какие методы поддерживает сервер:
# OPTIONS запрос
response = requests.options("https://api.example.com/users")
print(response.headers.get("Allow")) # GET, POST, PUT, DELETE
Сравнительная таблица
| Метод | Безопасный | Идемпотентный | Кэшируемый | Тело запроса | Используется |
|---|---|---|---|---|---|
| GET | Да | Да | Да | Нет | Чтение |
| POST | Нет | Нет | Нет | Да | Создание |
| PUT | Нет | Да | Нет | Да | Полное обновление |
| PATCH | Нет | Нет | Нет | Да | Частичное обновление |
| DELETE | Нет | Да | Нет | Нет | Удаление |
| HEAD | Да | Да | Да | Нет | Метаданные |
| OPTIONS | Да | Да | Нет | Нет | Поддерживаемые методы |
Практический пример REST API
import requests
BASE_URL = "https://api.example.com/products"
# 1. Получить все товары
response = requests.get(BASE_URL)
products = response.json()
# 2. Получить конкретный товар
response = requests.get(f"{BASE_URL}/123")
product = response.json()
# 3. Создать новый товар
new_product = {"name": "Товар", "price": 100}
response = requests.post(BASE_URL, json=new_product)
created_id = response.json()["id"]
# 4. Обновить часть товара
updates = {"price": 120}
response = requests.patch(f"{BASE_URL}/{created_id}", json=updates)
# 5. Полностью заменить товар
full_update = {"name": "Новый товар", "price": 150, "stock": 50}
response = requests.put(f"{BASE_URL}/{created_id}", json=full_update)
# 6. Удалить товар
response = requests.delete(f"{BASE_URL}/{created_id}")
Правило выбора метода
- GET: читаешь данные
- POST: создаёшь новый ресурс
- PUT: заменяешь весь ресурс
- PATCH: обновляешь часть ресурса
- DELETE: удаляешь ресурс