Ответ
При проектировании и взаимодействии с 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 с теми же данными должен приводить к одинаковому состоянию системы, что критично для надёжности автоматических скриптов при повторах запросов.