Мои клиенты используют одно из следующих средств при регистрации в моем приложении:
- Foo API (требуется " auth_key ", " пароль ", " email ")
- Acme API (требуется " secure_code ", " имя пользователя ", " пароль ")
- Bar API (требуется " xyz_code ", " pass_key ")
(поддельные имена и еще 15 опущены для простоты)
Я бы предпочел не иметь 10-15 таблиц в моей базе данных только для разных вариантов интеграции API, которые я предлагаю (особенно когда они все для одной и той же вещи, и они просто выбирают 1 из всего списка).
Мое решение было таким:
Создайте таблицу api_configuration
со столбцом api_name
, который содержит код для определенного API (например, "foo_api"
)
Создайте таблицу с именем credentials_attribute
с внешним ключом обратно к api_configuration
, столбец с именем name
и столбец с именем value
.
Затем я создаю пользовательский интерфейс для выбора API. Если они выберут Acme API, он запросит «secure_code», «username» и «password» и создаст строку в credentials_attribute
для каждой пары имя / значение.
На моей модели ORM для api_configuration
я могу создать метод для поиска credentials_attribute
значений на основе текущих api_name
.
Чувствуется ли это решение правильным или есть другой способ сделать это, если бы вам пришлось смоделировать решение для этой проблемы? Пожалуйста, объясните ваше обоснование (например, лучше для производительности и т. Д.)