Главная/Рецепты (Cookbook)/Управляйте default-записями ENУКРРУС API-справочник (ReDoc) ↗

Управляйте default-записями

Два ключа, один default — переключите его атомарно, затем отключите с заменой в одной транзакции.

Флаг default решает, который из ваших ключей отдаёт resolve. Этот сценарий прогоняет весь его инвариант: ровно один активный default, атомарные переключения и ход «disable с заменой».

Цель

Держать два credential для одного провайдера, переключить default между ними и отключить default, одновременно повысив второй — ни разу не наблюдая ноль или два default по пути.

Предварительные условия

  • Один активный default-credential (назовём его A) из сценария 02.

Шаги

1. Добавьте второй ключ — default сам не двигается

Создайте credential B для того же провайдера без make_default. Ожидаемый 201 с is_default: false, а перечитанный A всё ещё держит флаг — автоматически default-ом становится только первый credential владельца.

Создание с флагом забирает default атомарно

Create с make_default: true вместо этого понизил бы A и пришёл новым default-ом в одной транзакции — то же переключение, что в шаге 2, только слитое с созданием. Задокументированный 409 DEFAULT_CREDENTIAL_ALREADY_EXISTS — лишь тайбрейк, когда два таких create бегут наперегонки.

2. Переключите default на B

Вызовите POST /v1/credentials/{B}/make-default с версией B:

curl -s -X POST "$CREDS_BASE/v1/credentials/$B_ID/make-default" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"version": 1}'

Ожидаемый 200 с is_default: true. Перечитайте A: его флаг исчез — переключение произошло в одной транзакции.

3. Отключите B, повысив A тем же движением

Вызовите POST /v1/credentials/{B}/disable с текущей версией B и replacement_default_id:

r = httpx.post(f"{CREDS_BASE}/v1/credentials/{b_id}/disable", headers=headers, json={
    "version": b_version,
    "replacement_default_id": a_id,
})
assert r.status_code == 200
assert r.json()["status"] == "disabled" and r.json()["is_default"] is False

Ожидаемо: B — disabled без флага; A — active и снова default — одна транзакция, никакого промежутка без default.

4. Включите B обратно — флаг не следует за ним

Вызовите POST /v1/credentials/{B}/enable. Ожидаемый 200, status: "active", но is_default: false — enable никогда не восстанавливает default; повышение остаётся явным.

Проверено тестом test_s04_manage_defaults.