Quels méthodes peuvent garantir que l'exécution d'une opération de réservation dans l'API REST ne modifiera pas l'état du système lors d'appels répétés?
Réponse de l'IA
sobes.tech IA
Чтобы операция бронирования в 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);
}
Такой подход предотвращает дублирование бронирований при повторных запросах.