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

В чем разница между методами 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: удаляешь ресурс
В чем разница между методами HTTP запросов? | PrepBro