Ответ
Для операции получения данных по идентификатору (номеру карты) следует использовать метод 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для часто запрашиваемых данных.