¿Qué métodos se pueden utilizar para garantizar que la ejecución de una operación de reserva en la API REST no provoque cambios en el estado del sistema en llamadas repetidas?
Respuesta de la IA
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);
}
Такой подход предотвращает дублирование бронирований при повторных запросах.