Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="api-concurrency"></a>

# Оптимистическая блокировка

## Коротко

Проверяйте версию записи перед сохранением, если пользователь может перезаписать чужую работу.

## Плохо

```text
Аня и Борис открыли v3.
Аня сохранила v4. Борис молча затёр её.
```

## Хорошо

```text
Борис отправляет If-Match: "v3".
Сервер отвечает 412: версия уже изменилась.
```

## Почему

Последняя запись не всегда является правильным результатом совместной работы.

## Когда применять

Можно использовать ETag/If-Match либо документированный revision с 409. Не смешивайте эти договорённости неявно.

## Как проверить

- Два клиента меняют одну запись: второй получает понятный конфликт?

## Человек

Выбирает поведение интерфейса при конфликте изменений.

## Агент

Реализует серверный контракт и проверяет успешный запрос, неверный ввод и повторное обращение.

Контроль результата:

- Два клиента меняют одну запись: второй получает понятный конфликт?

## Источники

- [RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html)

Уровень: Рекомендуется. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/api/openapi-modular/rules/concurrency.md)
