Разделение API для разных типов клиентов
👁 480↗ 2💬 12
Во многих проектах, где было несколько типов клиентов, например Web, Mobile и например публичный доступ к данным. В этих проектах мы использовали единое АПИ для всех подключений.
Но в этом варианте как есть плюсы, так и минусы.
Плюсом является то что мы упрощаем поддержку, имея только один backend для всего. Минусом является зависимость этих сервисов друг от друга. Например если мы вносим какое-то изменение для версии web, то мы должны быть уверены, что это изменение совместимо с другими клиентами.
Еще из-за такой зависимости у нас была проблема с тем, что API часто попадало под DDOS атаку через web форму и тем самым все остальные клиенты тоже страдали.
В связи с этим, мы решили разделить в первую очередь Public API. Вынеся туда основные методы для работы с нашим сервисом и уведомив всех партнеров об этом.
НО с мобильным приложением стало сложнее. Поскольку URL обращения был зашит внутри билда аппки. Следовательно мы могли этот url поменять только в следующей версии, но не факт что все пользователи обновятся на новое приложение и поэтому мы обязаны были поддерживать уже 2 варианта АПИ для мобильного приложения.
Стало ли нам от этого проще жить? И да и нет, со временем мы все таки избавились от старых методов для мобилки, но на это потребовался очень долгий период, чтобы убедиться, что более 90% наших пользователей уже перешли на новую версию.
Такие архитектурные изменения всегда боль, но они необходимы, как говорится “Меняйся или умри”.
В новых проектах я стал сразу разделять эти АПИ, во многих случаев я просто дублирую сервис на еще один поддомен для каждого типа клиента и таким образом, в будущем если потребуется вносить конкретные изменения для одного из типов клиента, это не внесет дополнительных проблем с миграцией и версионированием.
Обсуждаем тут: @kyb_chat
Подписываемся тут: @knowyourbackend
Комментарии · 12
- @superadmin0777Интересно как защищались от DDOS?
- В основном это CloudFlare и горизонтальное динамическое масштабирование.
- @superadmin0777rate limiter пробовали?
- @shaurgonRate Limiter в CF достаточно странный. Там только 6 правил и отвечать можно только статичной страницей.
- @someexampleВопрос, а нормальный ли подход сначала реализовать один api и уже потом разделять на платформы если в команде мало разработчиков?
- Конечно нормально, нет ничего не нормального вообще. Вопрос только в компромиссах. С какими сложностями мы в итоге столкнулись я описал в посте. Что переход на разделенное АПИ был долгим и сложным процессом. Однако в самом начале поддерживать сразу все версии апи для разных типов клиентов кажется не целесообразным. Поэтому я просто выкатываю одно приложение сейчас и дублирую его на поддомены для каждого из типов клиентов.
- @shaurgonЕсть такая штука, Headless CMS, по сути, это бэкенд для любого типа фронта
- ты пробовал?
- @shaurgonТыкался ради экспериментов. Не скажу, что решение прям ВАУ, но небольшие проектики потянет. Их на Jamstack приличное количество, выбирай любую
- @this_just_catА почему бы не версионировать апи. some.app/mobile-api/(v1/v2/v...)
- Да это так и происходит
- @this_just_catну и тушить беки по мере устаревания. Или подрезать функции исходя из устаревания.