Sobes.tech
Middle
116

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 была идемпотентной (повторные вызовы не изменяют состояние), можно использовать следующие методы:

  1. Использование идемпотентных HTTP-методов — например, PUT или DELETE по определённому ресурсу.

  2. Введение уникального идентификатора запроса (idempotency key) — клиент генерирует уникальный ключ для каждой операции бронирования и отправляет его в заголовке или теле запроса. Сервер сохраняет ключ и результат операции, при повторном запросе с тем же ключом возвращает тот же результат без повторного изменения состояния.

  3. Проверка существования бронирования перед созданием — сервер проверяет, не было ли уже создано бронирование с такими параметрами, и если да, возвращает существующий ресурс.

Пример использования 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);
}

Такой подход предотвращает дублирование бронирований при повторных запросах.