Рекомендации по передовой практике - Loopback API - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу создать веб-сервис, и похоже, что Loopback - хорошая отправная точка. Чтобы объяснить мой вопрос, я опишу ситуацию

У меня есть 2 таблицы MySQL:
Пользователи
Компании
У каждого пользователя есть своя компания. Это как основной пользователь для своей компании.

Я хочу создать таблицу продуктов для каждой компании следующим образом:
company1_Products,
company2_Products,
company3_Products

В каждой компании есть внутренние пользователи, например:
company1_Users
company2_Users
company3_Users

Внутренние пользователи входят в систему с соответствующего субдомена, например
company1.myservice.com
company2.myservice.com

Для API я хочу, чтобы источник данных получал Продукты из соответствующей таблицы. Итак, вопрос в том, как динамически изменять источник данных?

А как обращаться с пользователями? Хранить в одной таблице нехорошо, потому что внутренние пользователи компании могут быть в разных компаниях ...

Может быть, есть лучший способ сделать такие модели?

1 Ответ

0 голосов
/ 09 ноября 2018

Отказ от ответственности: я соавтор и один из текущих сопровождающих LoopBack.

как динамически изменять источник данных?

Следующий ответ StackOverflow описывает решение о том, как присоединить одну модель (например, Product) к нескольким источникам данных: https://stackoverflow.com/a/28327323/69868 Это решение будет работать, если вы создаете одну базу данных MySQL для компании вместо использования имени компании в качестве префикс имени таблицы продуктов.

Чтобы добиться того, что вы описали, вы можете использовать подклассы моделей. Для каждой компании определите новую модель продукта для конкретной компании, унаследованную от общей модели Product и изменив имя таблицы.

// common/models/company1-product.json
{
  "name": "Company1_Product",
  "base": "Product",
  "mysql": {
    "tableName": "company1_Products"
  }
  // etc.
}

Вы даже можете создавать эти модели на лету, используя API-интерфейсы app.registry.createModel() и app.model(), а затем запускать dataSource.autoupdate для создания таблиц SQL для новых моделей.

А как обращаться с пользователями? Хранить в одной таблице нехорошо, потому что внутренние пользователи компании могут быть в разных компаниях ...

Полагаю, вы можете использовать тот же подход, что и для Продуктов, и как вы описали в своем вопросе.

Может быть, есть лучший способ сделать такие модели?

Проблема, с которой вы сталкиваетесь, - это многопользовательский режим. Боюсь, мы еще не нашли простое в использовании решение. Существует много возможных способов реализации мультитенантности.

Например, вы можете создать одно приложение LoopBack для каждой компании (арендатора), а затем создать приложение LoopBack или Express верхнего уровня для маршрутизации входящих запросов в соответствующий экземпляр приложения LB для конкретного арендатора. См. Следующий репозиторий для реализации концепции: https://github.com/strongloop/loopback-multitenant-poc

...