Какой бывает работа с бэкендом
Бывает, что API-методы хорошо описаны в сваггере. Состояние авторизации, список параметров, выбор content-type и схема. Для каждого метода прописаны типы ошибок, которые он генерирует. Контракт определяется бэкендом, тебя не спрашивают. Ты формашлеп.
Бывает, что добавление новых и изменение старых методов на бэкенде согласовывают с тобой. Тебя спрашивают про совместимость и миграции, формат данных и ограничения, ошибки и идемпотентность, название полей и их регистр.
Бывает, что ты полностью отвечаешь за контракт. Какие поля нужны на клиенте, какие сортировки, фильтры и лимиты применять. Бэкендер идет делать. Ты архитектор.
Бывает, что сервер использует сквозную модель – шлёт только нужные NotNull-поля. Клиент кладет их сразу в Room, без каких-либо мапперов. Меньше ошибок трансформаций, проще тесты, быстрее доставка фич. Встречается такая схема очень редко.
Бывают стейтфулл-клиенты. Все получаемые из сети данные хранятся в Room. База данных – единый источник истины. Входящие данные мерджатся через upsert с транзакциями. Данные читаются реактивно, UI подписан на Flow и мгновенно получает апдейты. База мигрируется, заранее проектируется схема с ForeignKey.
Бывают стейтлесс-клиенты. UI живет по принципу Loading-Content-Error. Каждый запрос несет весь контекст. Вместо локальной базы – in-memory-кэш на время жизни экрана. Пагинация детерминирована. Ошибки маппятся на понятные состояния. Такой клиент легко масштабировать и тестировать.
Бывают приложения на сокетах. Клиент держит постоянное TLS-соединение, авторизуется и поддерживает канал. Сообщения идут по протоколу JSON. При обрыве – реконнект. Надо учитывать жизненный цикл.
Бывает, что сваггера и документации нет вообще. Бэкендер пропал. Айосник потерялся. Аналитик не нанимался. Делаешь новые методы, разбирая код iOS-клиента и копируя его вызовы. Проверяешь запросы через Postman. Выявляешь формат ошибок.
Бывает, твое приложение начинают использовать в дарксторах (подвал -1 этаж). Интернет там ловит только у входа. Было – тонкий клиент и 20 сетевых запросов. Стало – толстый клиент и 2 сетевых запроса. Остальные 18 превратились в локальную синхронизацию данных в Room.
Бывает наступает эпоха херового мобильного интернета. Все глушат, шатают и отключают. Позволяем запросам на изменение стейта (без получения данных) выполняться локально. Они хранятся в руме как упорядоченная цепочка вызовов. Приложение отслеживает состояние сети и через воркменеджер выполяет их пачкой по порядку. И это даже работает.
Нужно быть готовым ко всему.
Post #300
411
