Чтобы операция бронирования в REST API была идемпотентной (повторные вызовы не изменяют состояние), можно использовать следующие методы:
Какими методами можно гарантировать, что выполнение операции бронирования в REST API не приведёт к изменению состояния системы при повторных вызовах?
Чтобы операция бронирования в REST API была идемпотентной (повторные вызовы не изменяют состояние), можно использовать следующие методы:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Чтобы операция бронирования в REST API была идемпотентной (повторные вызовы не изменяют состояние), можно использовать следующие методы:
- Использование идемпотентных HTTP-методов — например, PUT или DELETE по определённому ресурсу.
- Введение уникального идентификатора запроса (idempotency key) — клиент генерирует уникальный ключ для каждой операции бронирования и отправляет его в заголовке или теле запроса. Сервер сохраняет ключ и результат операции, при повторном запросе с тем же ключом возвращает тот же результат без повторного изменения состояния.
- Проверка существования бронирования перед созданием — сервер проверяет, не было ли уже создано бронирование с такими параметрами, и если да, возвращает существующий ресурс.
Пример использования idempotency key в Java (псевдокод):
@PostMapping("/booking")
public ResponseEntity<?> createBooking(@RequestBody BookingRequest request, @RequestHeader("Idempotency-Key") String key) {
if (bookingService.existsByIdempotencyKey(key)) {
return ResponseEntity.ok(bookingService.getByIdempotencyKey(key));
}
Booking booking = bookingService.createBooking(request, key);
return ResponseEntity.status(HttpStatus.CREATED).body(booking);
}
Такой подход предотвращает дублирование бронирований при повторных запросах.