Какой HTTP-метод использовать для API, возвращающего данные клиента по номеру карты?

«Какой HTTP-метод использовать для API, возвращающего данные клиента по номеру карты?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для операции получения данных по идентификатору (номеру карты) следует использовать метод GET.

Почему GET?

  • Идемпотентность: Многократные вызовы возвращают одинаковый результат и не изменяют состояние сервера.
  • Семантика HTTP: GET предназначен для запросов данных.
  • Кэширование: Ответы на GET могут кэшироваться на промежуточных прокси и клиентах.

Рекомендуемый дизайн endpoint'а:

GET /api/cards/{cardNumber}/customer

Пример реализации на Spring Boot:

@RestController
@RequestMapping("/api/cards")
public class CardController {

    @GetMapping("/{cardNumber}/customer")
    public ResponseEntity<CustomerDto> getCustomerByCardNumber(
            @PathVariable @Pattern(regexp = "^[0-9]{16}$") String cardNumber) {
        // 1. Валидация формата номера (аннотация @Pattern)
        // 2. Поиск в сервисном слое
        CustomerDto customer = cardService.findCustomerByCard(cardNumber);
        // 3. Обработка отсутствия данных
        return customer != null 
                ? ResponseEntity.ok(customer) 
                : ResponseEntity.notFound().build(); // HTTP 404
    }
}

Дополнительные рекомендации:

  • Безопасность: Endpoint должен быть защищен (аутентификация/авторизация), так как возвращает чувствительные данные.
  • Валидация: Всегда проверяйте входной параметр cardNumber.
  • Кэширование: Рассмотрите заголовки Cache-Control для часто запрашиваемых данных.