Как вы проектируете REST-эндпоинты в Spring
Вопрос
Как вы проектируете REST API на Spring: DTO, валидация, ошибки, пагинация, версии?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Ресурсы и 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 ошибок.