В чем разница между HTTP-методами в REST API?

«В чем разница между HTTP-методами в REST API?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При проектировании и взаимодействии с REST API (например, для автоматизации облачных ресурсов через их API) важно понимать семантику HTTP-методов.

Основные методы и их назначение:

Метод Идемпотентен? Безопасен? Типичное использование в REST
GET Да Да Получение данных о ресурсе (например, GET /api/v1/instances).
POST Нет Нет Создание нового ресурса или запуск действия (например, POST /api/v1/instances для создания ВМ).
PUT Да Нет Полное обновление ресурса (замена). Если ресурса нет — может создавать (например, PUT /api/v1/instances/{id}).
PATCH Нет Нет Частичное обновление ресурса (например, PATCH /api/v1/instances/{id} с телом {"status": "stopped"}).
DELETE Да Нет Удаление ресурса (например, DELETE /api/v1/instances/{id}).

Практический пример (с использованием curl для автоматизации):

# Получить список подов в k8s кластере (GET)
curl -H "Authorization: Bearer $TOKEN" https://kube-api/api/v1/pods

# Создать новый конфиг в Consul (POST)
curl -X POST -d @config.json https://consul-server/v1/kv/myapp/config

# Полностью обновить (заменить) описание security group в AWS-like API (PUT)
curl -X PUT -H "Content-Type: application/json" -d @sg-rules.json https://api.cloud.com/v1/security-groups/sg-123

# Частично обновить теги инстанса (PATCH)
curl -X PATCH -H "Content-Type: application/json-patch+json" -d '[{"op":"add","path":"/tags/env","value":"prod"}]' https://api.cloud.com/v1/instances/i-abc123

# Удалить snapshot (DELETE)
curl -X DELETE https://api.cloud.com/v1/snapshots/snap-789

Идемпотентность — ключевое свойство: повторный вызов PUT или DELETE с теми же данными должен приводить к одинаковому состоянию системы, что критично для надёжности автоматических скриптов при повторах запросов.