Какими методами можно гарантировать, что выполнение операции бронирования в REST API не приведёт к изменению состояния системы при повторных вызовах?
Ответ от нейросети
sobes.tech AI
Чтобы операция бронирования в 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);
}
Такой подход предотвращает дублирование бронирований при повторных запросах.