Sobes.tech
Назад к вопросам
Middle
71

Какими методами можно гарантировать, что выполнение операции бронирования в REST API не приведёт к изменению состояния системы при повторных вызовах?

Ответ от нейросети

sobes.tech AI

Чтобы операция бронирования в 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);
}

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