Аладдин Биябангерд
ТекстыАрхитектура backend

Почему простая фича разрастается, когда доходит до backend

Автор:Аладдин БиябангердОпубликовано:4 мин чтения

Одна из самых опасных фраз в backend-работе — «давай просто добавим эндпоинт». На экране это действительно может быть одна кнопка. Но вопрос меняется, как только начинаешь думать, что происходит после нажатия.

Я проходил через это не раз. Сначала задача выглядит крошечной: принять данные, записать в базу, вернуть ответ. Потом выясняется, что эти же данные использует другой сервис, что в некоторых случаях прошлую запись менять нельзя, что никто не знает, что будет, если транзакция оборвётся на середине, и что при повторном запросе система может выполнить операцию дважды.

Написать эндпоинт — самая простая часть

Писать контроллер на Java и Spring Boot удобно. Сложность не в коде, а в понимании того, какое правило системы этот код защищает.

Поэтому, когда приходит фича, я стараюсь начинать не с эндпоинта. Сначала спрашиваю: из какого состояния в какое переходит эта операция? Какие данные могут измениться? Какие меняться не должны? Что будет, если тот же запрос придёт снова?

Если ответов на эти вопросы нет, начать писать код обычно значит просто отложить проблему на несколько часов.

Backend нужен не для того, чтобы принимать запросы

Я смотрю на backend шире, чем на контроллеры и сервисы. Backend — это место, где держатся правила системы. Frontend может выглядеть хорошо, но если правило не защищено в backend, система хорошей не будет.

Именно поэтому больше всего мне нравятся системы, которые работают тихо. Оператор не думает, на какую кнопку он нажал. А система знает, что за этой кнопкой нужно защитить.