Об альтернативах 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, что в итоге делает приложение слишком тяжелым для использования как микро-сервиса.
В сравнении с другими библиотеками, Express слишком медленный для использования в минимальных целях, когда не нужно выполнять сложные запросы. График снизу показывает сравнение выполнения простейшего запроса на получение JSON документа.
Замеры, которые показаны на последней картинке, не показывают, что Express медленный в общем, они показывают, что вам нужно удвоить производительность вашего процессора ради того, что бы выполнять простейшие операции… В следствие этого увеличиться месячный платеж за пользования AWS, Google Cloud, MS Azure или другого облачного сервиса, которым вы пользуетесь, а это перейдет в больший и зачастую необоснованный расход средств.
Заключение
В Node.js есть много различных способов реализации REST API, ниже перечислены которые подойдут для вас, в зависимости от задачи: