Сервисы
Приходилось работать в проекте со множеством сервисов. Решил пожаловаться, какое же это неблагодарное дело — выскребать данные по углам, чтобы собрать конфету.
Ощущение, что сервисы делают люди, лишенные эмпатии. Например, есть метод
get-by-id
, чтобы взять сущность по айдишке. Угадайте, сколько сервисов
поддерживают get-by-idS
— получить список по айдишкам? В лучшем случае
половина. У оставшейся половины get-by-ids
возвращает сущности порциями по
сто. Тебе нужно 250? Пиши обертку с пагинацией, next-page
, limit/offset
, вот
это все.
Вызывал сервис несколько тысяч раз? Начинаются разборки “кто нас дидосит”. Вызывай редко, не больше десяти раз, а еще лучше никогда. И везде проблемы с сообщением об ошибке. Передал что-то не то — иди смотри логи.
Я согласен с тем, что логику нужно разносить по сервисам. Но сервисы должны использовать общую шину данных: базу, очередь сообщений, файлы в S3 в конце концов. Гонять друг другу JSON выглядит хорошо в теории, но на практике — фу.
Условный Постгрес выплюнет миллион записей за доли секунды. Забрать этот же миллион из другого сервиса — приключение на неделю. Тут и метрики, лимиты, квоты, сетевые спайки, etc… А когда таких запросов несколько, сервис ложится спать.
Эти сервисы напоминают современного айтишника: хрупкого, тряпковатого мужчину 25 лет, который чуть что — выгорает. У которого все токсичны и вообще — отстаньте.
Удивляет, что подобные архитектуры строятся намеренно, и их создателям платят большие деньги. При этом опция “легкий доступ к данным” в архитектуру не входит.
А мне разгребать.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
John, 29th Mar 2024, link
А как возвращать списки без пагинации через API? Она в любом случае будет в API и в любом случае будет какое-то разумное ограничение сверху. Нельзя вернуть список из 100500 миллионов элементов если тебе так хочется.
Обёртку с ленивым итератором по всем записям можно сделать в клиенте если нужно, которая будет прозрачно делать запросы, листая страницы. В реальной жизни всё равно так или иначе используется пагинация - получение и отображение данных делается порциями.