Ответ вслух Middle Spring MVC и REST обновлено

Как вы проектируете REST-эндпоинты в Spring

Вопрос

Как вы проектируете REST API на Spring: DTO, валидация, ошибки, пагинация, версии?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Начинаю с ресурсов и методов: GET /orders/{id}, POST /orders, правильные статусы: 201 с Location на создание, 404, 409 на конфликт, 422 или 400 на ошибки валидации. Наружу только DTO, обычно record, маппинг через MapStruct или вручную, сущности не отдаю.

Что должно прозвучать в ответе

  • Ресурсы и HTTP-методы, правильные статусы

  • DTO вместо сущностей, маппинг

  • Bean Validation с @Valid

  • Единые ошибки через ControllerAdvice и ProblemDetail

  • Пагинация и сортировка, ограничение размера страницы

  • Версионирование и документация OpenAPI

Что могут спросить следом

  • Как сделать POST идемпотентным?
  • Offset или курсорная пагинация?

Разбор

Начинаю с ресурсов и методов: GET /orders/{id}, POST /orders, правильные статусы: 201 с Location на создание, 404, 409 на конфликт, 422 или 400 на ошибки валидации. Наружу только DTO, обычно record, маппинг через MapStruct или вручную, сущности не отдаю. Входные DTO валидирую аннотациями и @Valid. Ошибки привожу к одному формату через @RestControllerAdvice и ProblemDetail, без стектрейсов. Списки всегда с пагинацией и максимальным размером страницы, для больших таблиц курсорная пагинация. Версию кладу в путь /api/v1 или заголовок, документацию генерирую через springdoc-openapi. Для POST, который нельзя повторять, например оплаты, принимаю ключ идемпотентности.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.