Проверяет знание идемпотентности HTTP-методов и их роли в надежности API.
Идемпотентные методы при повторении дают одинаковый результат: GET, PUT, DELETE, HEAD, OPTIONS. POST — неидемпотентен (каждый вызов создает новый ресурс). Это важно для безопасных повторов: если сеть упала, клиент может отправить PUT-запрос снова без риска.
Что такое идемпотентность:
Операция, которую можно выполнить многократно без изменения результата (например, удаление ресурса: первый вызов DELETE возвращает 200, второй — 404, но состояние системы не меняется).
Примеры:
GET /api/users/1:
Всегда возвращает одни и те же данные (если пользователь не изменён).
PUT /api/users/1:
Обновляет данные. Повторный вызов с теми же данными оставляет систему в том же состоянии.
DELETE /api/users/1:
После первого удаления ресурс исчезает. Повторный запрос не создает ошибок (идемпотентность соблюдается).
Почему это важно:
Безопасность при сбоях:
Клиент может повторять идемпотентные запросы при таймаутах:
// Пример повтора PUT в Go
for i := 0; i < 3; i++ {
resp, err := http.NewRequest("PUT", url, body)
if err == nil {
break
}
}Предсказуемость:
Клиентские библиотеки автоматически повторяют идемпотентные методы.
POST — неидемпотентен:
// Каждый POST создаёт новый заказ
http.Post("/api/orders", "application/json", orderData)Вывод: Всегда проектируйте GET, PUT, DELETE как идемпотентные. Для POST используйте уникальные ID запросов, чтобы избежать дублирования.