Нет, вам не нужен Express в вашем REST API на Node.js +11


image

Об альтернативах Express, где и почему стоит отказаться от Express'a и небольшие замеры в переводе под катом


Express


Express – простой, хорошо документированный, отлично поддерживаемый и наиболее скачиваемый фреймворк для Node.js
Если вы попробуете загуглить как сделать простейший HTTP сервер, то вам, скорей всего, первым запросом выдаст примерно такой код:

const server = require('express')({})

   server.get('/', (req, res) => {
       res.send('Hello World!')
});
server.listen(3000);

REST APIs


В архитектуре приложений, которые разрабатываются компаниями, REST API и REST сервисы продолжают играть фундаментальную роль, так как HTTP до сих пор используется как основной протокол для коммуникации. Это значит, что программист, который собирается сделать новое приложение или микро-сервис, воспользуется REST API вместо, например, “очереди событий”.

С наступлением популярности использования микро-сервисов, REST API стремится к тому, что бы быть максимально маленьким и выполнять минимальное количество операций. Это влечет в себе то, что число конечных пунктов в разрабатываемом API будет возрастать прямо-пропорционально количеству микро-сервисов и для каждого простого действия будет своя конечная точка. Например, для того чтобы изменить данные пользователя в базе данных, сначала будет вызван метод /user/search для того, чтобы найти ID нужного нам пользователя, а уже затем будет вызван метод /user/update с указанием параметра возвращенного нам до этого ID, вместо того, чтобы выполнить эту операцию(Прим. Ред.).
Да, REST API должны быть быстрыми, необходимо чтобы они были быстрыми!
Так же, при создании высоконагруженного приложения с использованием REST API, все чаще пользуются паттерном микро-сервисов. Такие приложения строятся на API Gateways. API Gateway – это, по сути, прокси сервер, к которому обращается пользователь, а этот прокси сервер уже обращается к наименее загруженному микро-сервису. Обычно API Gateway также решает небольшие задачи, такие как:

  • Обработка SSL сертификатов
  • Распределение нагрузки
  • Авторизация и аутентификация
  • Кэширование
  • Сжатие контента запроса
  • ...

Однако, Express слишком тяжелый и медленный


Express великолепен, насыщен возможностями…, но он так же тяжелый и медленный для использования в небольших целях, как например REST API в микро-сервисы


Последняя версия библиотеки(4.16.4) зависит от 30 модулей, которые в нее встроены, а в процессе разработки к этим модулем добавляется ещё около 20, что в итоге делает приложение слишком тяжелым для использования как микро-сервиса.

image

В сравнении с другими библиотеками, Express слишком медленный для использования в минимальных целях, когда не нужно выполнять сложные запросы. График снизу показывает сравнение выполнения простейшего запроса на получение JSON документа.

image

image

Замеры, которые показаны на последней картинке, не показывают, что Express медленный в общем, они показывают, что вам нужно удвоить производительность вашего процессора ради того, что бы выполнять простейшие операции… В следствие этого увеличиться месячный платеж за пользования AWS, Google Cloud, MS Azure или другого облачного сервиса, которым вы пользуетесь, а это перейдет в больший и зачастую необоснованный расход средств.

Заключение


image

В Node.js есть много различных способов реализации REST API, ниже перечислены которые подойдут для вас, в зависимости от задачи:

  • Если вам нужна максимальная производительность, но при этом минимальные затраты, то Express точно не то, что вам нужно. Присмотритесь к Fastify.
  • Если вам нужна небольшая библиотека с минимальным необходимым набором функций, то вам явно стоит взглянут на restify, koa, polka или же restana




К сожалению, не доступен сервер mySQL