Redux поток для динамического API в реальном времени?

Я ищу немного ссылок относительно редукса; из-за поддержки нескольких различных платформ (Java Android, ios swift, ios Obj-c, go, Node.js и веб-javascript) я разработал решение для управления приложениями в реальном времени.

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

API.fromURL('https://api.mysite.com/v1').then(loadApi).catch(...);

function loadAPI(api){
   if (!api.user){
     api.login('user','password').then(()=>{
        workWithAPI(api);
     }).catch(...);
   } else {
      workWithAPI(api);
   }
}

function workWithAPI(api){
   console.log(api.user);
   api.user.on('update',(event)=>{
     console.log(event.name === api.user.name); //true
     //changes happen even if you don't have a listener
   });

   if (!api.user.isSubscribed()){
      api.user.subscribe().then(()=>{
         api.user.setName(...).then...;
         save(api.serialize());
      }).catch(...);
   } else {
      api.user.setName(...).then...;
      save(api.serialize());
   }
}

API.fromData(...).then(loadApi).catch(...);

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

Вопрос в том, как эффективно применить эту идею к концепции избыточности в контексте браузера?...

Принимая во внимание:

  1. Что все объекты, содержащиеся в объекте API, существуют в хранилище; но могут быть состояния приложения, связанные с пользовательским интерфейсом, которые не существуют в состоянии объекта API.

  2. То, что объект api и все, что в нем содержится, является изменчивым, а redux лучше работает с неизменяемостью.

  3. То, что объект api сериализуем так же, как магазин.

  4. То, что объект api - это дерево, и не рекомендуется использовать его в модели с избыточностью.

1 ответ

Вам необходимо синхронизировать ваше состояние API в вашем состоянии Store. Для этого, на мой взгляд, лучший способ - переписать или интегрировать ваш объект API внутри Redux в качестве создателя внешних действий.

Вот как я бы это сделал (учитывая, что вы не упомянули React):

Я бы поддержал поддерево для метаданных о соединении:

{ connecting: false, authenticated: true, status: 'CONNECTED' }

Таким образом, вы можете справиться, если ваше соединение обрывается или что-то еще. Дайте ему также некоторые действия, чтобы изменить это состояние.

const actions = { reconnectToAPI, logIn, logOut, connectionLost }

(эти элементы являются создателями действий, я использовал синтаксис ES6 для объекта, { reconnectToAPI } такой же как { reconnectToAPI: reconnectToAPI })

Теперь свяжите эти метаданные с вашими событиями.

connection.on('lost', reason => {
  dispatch(connectionLost(reason))
  dispatch(reconnectToAPI())
})

logIn был бы паролем, который аутентифицировал бы вас, используя имя пользователя и пароль через ваш API.

const logIn = (username, password) => dispatch => {
  return api.authenticate(username, password)
  .then(profile => {
    dispatch(loggedIn(profile))
  }, error => {
    dispatch(failedToLogIn(error))
  })
}

Затем вы сопоставляете свое состояние с другим деревом. Я бы посоветовал сделать для этого магазин энхансера или промежуточного программного обеспечения. Дайте ему также некоторые действия или автоматически сгенерируйте их, если вам это нужно.

Другие вопросы по тегам