Создать несколько таблиц или попробовать унифицировать?
Подскажите, как бы вы поступили в такой ситуации.
Проектирую базу данных, нужно создать таблицу (или таблицы), которая будет хранить данные для подключения к различным API.
Проблема в том, что у каждого поставщика API свой набор данных, необходимых для авторизации - где-то достаточно только одного ключа, где-то нужен логин и пароль, где-то два ключа. Также отличаются данные, которые возвращает API после авторизации.
Попытаться унифицировать все и создать одну таблицу, но с максимальным количеством полей (ненужные проставить как NULL), либо разделить на несколько таблиц - для каждого поставщика API своя таблица?
Также возникла идея создать одну таблицу по типу settings и в ней хранить три поля: id, название параметра, значение параметра, а нужные данные извлекать по префиксу api_имя-провайдера_имя-параметра (но в таком случае, скорее всего, понадобиться таблица с именами провайдеров).
Богдан Герасименко, если у вас тысячи записей, а вы выбираете 10 штук для работы. Если значения конфигов ваших api изменяются приложениями. В подобных случаях использование БД удобно, в вашем случае не очень понимаю причины переноса их в БД.
json поле.
Данные авторизации нужны только конкретному коду, работающему с этой авторизацией. Искать по токену авторизации, какому же сервису API принадлежит этот токен вы ведь не будете всё равно. (хотя и так можно будет при желании и достаточно современной СУБД)
но в таком случае, скорее всего, понадобиться таблица с именами провайдеров
А она у вас всё равно есть или будет.
Хоть вы сами работаете с API и к каждому сервису максимум один комплект данных авторизации (таблица, где будут ключи храниться и будет такой таблицей с именами провайдеров). Хоть вы даёте своим пользователям возможность добавить API себе - тогда у вас будет табличка user_id, api_provider_id, credentials
Отдельно из опыта разработчика как раз системы, завязанной на большое число сторонних API: сразу предполагайте, что API будут отвечать неадекватно и вам будут необходимы подробные логи уровня коммуникации сервисов: датавремя, какой запрос сделали к api, какой ответ получили. Если говорим о HTTP REST - то сохранять буквально весь HTTP request как он уходит текстом и сохранять весь пришедший ответ с заголовками, время отправки запроса, время получения ответа.