Какова наилучшая практика для создания Node.js Приложение REST API с поддержкой нескольких баз данных?

#node.js #database #express

#node.js #База данных #экспресс

Вопрос:

Недавно я создал Node.js REST API для простого блога с использованием Express.js для обработки HTTP-запросов и MySQL для сохранения (в настоящее время я не использую ORM: на моем уровне доступа к базе данных я вызываю хранимые процедуры напрямую).

Моя схема архитектуры выглядит следующим образом

Но что, если я захочу отказаться от MySQL и начать использовать MongoDB?

Я думаю, что лучшим подходом было бы добавить поддержку в мое приложение для обеих систем баз данных, чтобы, если я захочу переключиться с MySQL на MongoDB или наоборот, у меня были готовы оба уровня доступа к базе данных (исключая часть переноса данных).

Каков наилучший способ добиться этого?В идеале лучшим решением было бы просто изменить свойство конфигурации приложения, чтобы указать, какую базу данных я хочу использовать


Комментарии:

1. Поскольку это разные системы БД (реляционные и нереляционные), это очень сложный подход. Даже серьезные ORM не имеют этой функции, но они способны легко переключаться между реляционными базами данных

Ответ №1:

Это в значительной степени основано на мнении и контексте.

Каждый раз, когда вам нужны NodeJS для связи с базой данных, вы должны использовать модули, которые приспосабливаются к ним, чтобы упростить подключение, запросы и другие действия. Даже если бы вам пришлось самостоятельно писать модуль для абстрагирования баз данных, вы смогли бы справиться только с несколькими конкретными случаями. Не существует единого модуля для обработки их всех.

В больших приложениях, где одновременно может использоваться несколько API, они обычно находятся в разных конечных точках. В принципе, /api/mongo и /api/mysql и вы пишете их оба так, как будто вы пишете единый api, и для внесения изменений вы просто изменяете свои интерфейсные запросы.

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