Я новичок в узле и машинописи. Я работаю над созданием библиотеки узлов, которая обращается к другому API отдыха для получения и публикации данных. Эта библиотека используется любым приложением пользовательского интерфейса для отправки и получения данных из службы API. Теперь мой вопрос: как мне поддерживать конфигурацию среды c в библиотеке? Например:
Потребительские вызовы GET /user
Конечная точка пользователя на стороне потребителя вызывает метод в библиотеке для get data
Но если потребитель вызывает тестовую конечную точку пользователя Я хочу, чтобы библиотека использовала следующий URL-адрес API
для теста http://api.test.userinformation.company.com/user
для бета-версии http://api.beta.userinformation.company.com/user
Насколько я понимаю, библиотека является лишь справочной и работает в потребительском приложении. Библиотека, безусловно, может получить среду от потребителя, но я не хочу, чтобы потребитель указывал полный URL-адрес, который нужно нажать, поскольку это будет обязанностью библиотеки выяснить.
Примечание : URL-адрес - не единственная проблема, я могу решить, что с помощью переключателя среды в библиотеке у меня есть некоторые клиентские секреты, основанные на средах, которые я не могу ни сохранить в коде, ни вернуть в систему контроля версий.
Дополнительная информация
(согласно запросу jfriend00 в комментариях)
В моей библиотеке есть класс LibExecutionEngine и один метод, который является точкой входа в библиотеку:
export class LibExecutionEngine implements ExecutionEngine {
constructor(private environment: Environments, private trailLoader:
TrailLoader) {}
async GetUserInfo(
userId: string,
userGroupVersion: string
): Promise<UserInfo> {
return this.userLoader.loadUserInfo(userId, userGroupVersion)
}
}
export interface ExecutionEngine {
GetUserInfo(userId: string, userGroupVersion: string): Promise<UserInfo>
}
Потребитель начинает использовать библиотеку, создав экземпляр LibraryExecution и затем вызвав, например, getuserinfo. Как видите, конструктор для класса принимает среду. Когда у меня есть среда в библиотеке, мне нужно каким-то образом загрузить значения для ключей API Url
, APIClientId
и APIClientSecret
из конструктора. Я знаю два способа сделать это:
Вариант 1
Я мог бы сделать что-то вроде this._configLoader.SetConfigVariables(environment)
, где configLoader.ts
- это класс, который загружает указанные значения конфигурации c из файлов ( {environment}.json
), но это означало бы, что я поддерживаю вышеупомянутые переменные URL
и соответствующие clientid
, clientsecret
, чтобы иметь возможность попадать в URL в файле json, который я не должен проверять, чтобы управление исходным кодом.
Вариант 2
Я мог бы использовать пакет dotenv
npm и создать один файл .env, в котором я определяю три ключа, а затем значения сохраняются в развертывании конфигурация, которая отлично работает для независимо развертываемого приложения, но это библиотека и не запускается сама по себе ни в какой среде.
Опция 3
Принимать объект конфигурации от потребителя, что означает что потребитель библиотеки предоставляет URL, clientId и clientSecret на основе среды для доступа к библиотеке, но зачем возлагать ответственность за поддержание необходимого v ariables для библиотеки нужно поставить на потребителя?
Подскажите, пожалуйста, как лучше всего это реализовать.