Ответ
Идемпотентность — это свойство операции, при котором её многократное выполнение даёт тот же результат, что и однократное. Это критически важно для надёжности сетевых взаимодействий, особенно при возможных повторах запросов.
Почему это важно?
Повторный запрос (из-за таймаута или сбоя сети) не должен вызывать побочных эффектов, отличных от однократного выполнения.
Примеры HTTP-методов:
- Идемпотентные:
GET,HEAD,PUT,DELETE,OPTIONS,TRACE. - Неидемпотентный:
POST(создание нового ресурса при каждом вызове).
Практический пример в Swift:
// Идемпотентная операция: установка значения
func updateUserStatus(to status: String, for userId: String) {
// PUT /users/{userId}/status с телом { "status": status }
// Многократный вызов с одними данными даст одинаковый результат.
}
// Неидемпотентная операция: увеличение счётчика
func incrementCounter() {
// POST /counter/increment
// Каждый вызов увеличит значение, результат будет разным.
}
Ключевой принцип:
Идемпотентность обеспечивается семантикой операции, а не серверной реализацией. Клиент вправе ожидать, что повторная отправка того же идемпотентного запроса безопасна.