Перейти до вмісту

Ідемпотентність і безпечні повтори

Мережевий таймаут не показує, чи завершилася зміна до втрати відповіді. Для наведених нижче операцій передавайте Idempotency-Key, щоб безпечно повторити той самий логічний запит.

Створюйте новий UUID для кожної нової логічної зміни й передавайте його в заголовку:

Terminal window
curl -X POST "https://api.ltesocks.io/v2/ports/10000/reset" \
-H "Authorization: Bearer ${LTESOCKS_API_TOKEN}" \
-H "Idempotency-Key: 7c838e2d-7d52-42e7-aed1-528829cbd514"

Офіційні SDK створюють ключ автоматично для підтримуваних мутацій. Передайте збережений UUID явно, якщо продовжуєте той самий логічний запит після перезапуску застосунку:

const port = await client.ports.reset({
id: '10000',
idempotencyKey: '7c838e2d-7d52-42e7-aed1-528829cbd514',
});

Зберігайте ключ разом із методом, шляхом і тілом, доки результат не стане відомим. Повторно використовуйте його лише для точного повтору цього запиту. Для нової дії, іншого шляху або зміненого тіла створюйте новий UUID.

Коли API повертає раніше збережений результат, відповідь містить:

Idempotency-Replayed: true

Повтор зберігає початкову відповідь та її заголовки, зокрема Retry-At і Retry-After, якщо вони були присутні.

РезультатДія
З’єднання закрилося або минув таймаут до отримання відповідіПовторити точний запит із тим самим ключем
Ресурс уже містить потрібну змінуНе надсилати запит на зміну повторно
Помилка валідації або автентифікаціїУсунути причину; для зміненого запиту використати новий ключ
Відповідь про cooldown скиданняЗачекати до Retry-After або Retry-At, а потім перевірити, чи потрібен той самий логічний запит
Навмисний запуск наступної зміниСтворити новий ключ

Для тимчасових помилок використовуйте обмежений експоненційний backoff із випадковим відхиленням. Ідемпотентність запобігає повторному виконанню, але не робить безпечними необмежені повтори чи високу паралельність.

Публічний контракт приймає Idempotency-Key для таких змін:

ОбластьОперації
Обліковий записPOST /user/preferences
ЗамовленняPOST /ports/order
ТарифPOST /ports/{id}/extend, POST /ports/{id}/plan
Налаштування портуPOST /ports/{id}/tags, POST /ports/{id}/autorenew, POST /ports/{id}/signature, POST /ports/{id}/credentials, POST /ports/{id}/autoreset
ПідключенняPOST /ports/{id}/reset

Не додавайте заголовок до кожного POST автоматично. Наприклад, фільтрування POST /ports і сумісні операції видалення не документують підтримку ідемпотентності. Перевіряйте наявність заголовка для конкретної операції в довіднику API.

Cooldown і ознаки завершення скидання описані на сторінці Скидання та готовність порту.