Skip to content

Instantly share code, notes, and snippets.

@maximLeontiev
Last active August 16, 2023 07:47
Show Gist options
  • Select an option

  • Save maximLeontiev/3686c8db8cb3709f2e2504ede8e1babd to your computer and use it in GitHub Desktop.

Select an option

Save maximLeontiev/3686c8db8cb3709f2e2504ede8e1babd to your computer and use it in GitHub Desktop.

Feature flags

Наше SPA приложение состоит из 3-х страниц, главная, личный кабинет и поиск. Приложение без SSR. Нужна возможность включать или выключать определенную функциональность у части пользователей. Например, для пользователей с русским языком должен отображаться блок из новостей на главной странице, а для всех остальных этого блока нет.

Такое сервис уже существует. У него есть где-то админка, через которую мы можем сегментировать пользователей и управлять набором функциональности. У этого сервиса есть готовая API с нужным для нас эндпоинтом. Формат:

Request
  {
    userAgent: string,
    lang: string,
    keys: string[] // ex. ['showNews', 'showPopup', 'canDoSmth']
  }

Response
  {
    key: string,
    value: boolean
  }[]

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

Требования:

  • Инкапсулирован и его можно легко перенести в отдельный пакет для переиспользования
  • Запрос только нужных приложению флагов
  • Перезапрашивать все флаги в случае изменения одного из базовых параметров контекста, например языка
  • Динамическая догрузка необходимых флагов при переходе на другую страницу
  • Использовать значения флагов в любом месте (ui, бизнес-логике)
  • Приложение должно реактивно измениться в зависимости от флагов

Задание

Описать концепт, и набросать прототип без деталей реализации.

  • Концепции работы, что правильно хранить в этом сервисе, а что нет.
  • Флоу работы (инициализация, загрузка, использование)
  • Хранение данных
  • Использование в флагов
  • Методы по взаимодействию
  • Публичный интерфейс
  • Из чего состоит пакет
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment