Часто при работе с корпоративными клиентами я работаю над микросервисами. Эти микросервисы часто представляют собой приложения Node.js, управляемые событиями, которые прослушивают сообщения о подписках, выполняют некоторые действия и публикуют в новой теме.
Однако бывают случаи, когда мне нужно настроить небольшой веб-сервер корпоративного уровня для обработки запросов API и отправки некоторых данных. В таких ситуациях на помощь приходит Хапи.
Что такое Хапи?
Hapi — это мощная и масштабируемая среда приложений с минимальными накладными расходами и полной готовой функциональностью. Первоначально разработанный для работы со шкалой Walmart Черная пятница, он включает в себя богатый набор функций из коробки. В отличие от других фреймворков, таких как Express.js, которые позволяют интегрировать ПО промежуточного слоя по вашему выбору, Hapi предлагает богатый набор готовых функций, таких как проверка ввода, кэширование и аутентификация.
Вы можете спросить себя, почему вы должны выбрать Hapi вместо Express.js. Вот несколько причин, по которым вы можете рассмотреть его для своего следующего проекта.
Встроенные функции: Hapi поставляется с несколькими встроенными функциями, упрощающими разработку и развертывание API и сервисов. Например, Hapi имеет встроенную поддержку проверки ввода, аутентификации, кэширования и обработки ошибок, что может сэкономить ваше время и усилия при разработке приложения.
Экосистема плагинов: Hapi имеет богатую экосистему плагинов и расширений, которые могут помочь вам расширить функциональность вашего приложения без необходимости писать собственный код. Существуют плагины для интеграции с базами данных, безопасности и оптимизации производительности, среди прочего.
Самоуверенный подход: у Hapi более самоуверенный подход к разработке, чем у Express.js. Это означает, что Hapi предоставляет более структурированный и согласованный способ создания API, который может упростить работу над более крупными проектами с несколькими разработчиками.
Настройка на основе конфигурации: Hapi позволяет настроить ваше приложение с помощью файла конфигурации или объекта, что может упростить управление настройками и зависимостями вашего приложения.
Более высокая производительность: Hapi известен своей превосходной производительностью и масштабируемостью, что делает его хорошим выбором для приложений с высоким трафиком, требующих быстрого времени отклика и низкой задержки.
Стандартная безопасность: компоненты Hapi поставляются с готовыми настройками безопасности по умолчанию, гарантируя, что ваш сервер защищен от потенциальных уязвимостей системы безопасности. Hapi предоставляет такие функции, как ограничения полезной нагрузки и тайм-ауты запросов для защиты от перегрузки сервера. Кроме того, Hapi блокирует сообщения об ошибках, которые потенциально могут привести к утечке информации или эхо-эксплойтам, что еще больше повышает безопасность вашего приложения.
В действии
Мы собираемся настроить простой сервер, используя библиотеку проверки @hapi/joi.
Начните с создания нового каталога
mkdir my_hapi cd my_hapi
Затем инициализируйте проект с настройками по умолчанию.
npm init -y
Затем установите хапи и дзёи
npm install hapi npm install @hapi/joi
Создайте файл с именем server.js
const Hapi = require('hapi'); const Joi = require('@hapi/joi'); const server = Hapi.server({ port: 3000, host: 'localhost' }); server.route({ method: 'POST', path: '/users', handler: (request, h) => { const { firstName } = request.payload; // Process the user input here return { message: 'User created successfully', firstName }; }, options: { validate: { payload: Joi.object({ firstName: Joi.string().required(), lastName: Joi.string().required(), email: Joi.string().email().required(), password: Joi.string().min(8).required() }) } } }); (async () => { await server.start(); console.log(`Server running at: ${server.info.uri}`); })();
Чтобы увидеть, что мы сделали в этом файле. Мы включили фреймворк Hapi и библиотеку проверки Joi.
Затем мы создали сервер и определили почтовый маршрут с конечной точкой /users.
Используя joi, мы получаем валидацию из коробки. Таким образом, мы можем проверить входящую полезную нагрузку. Указываем тип и другие свойства и делаем поля обязательными.
В этом примере входящий объект должен выглядеть так.
{ "firstName": "Sam", "lastName": "Jones", "email": "[email protected]", "password": "red5StandingBy!" }
Если входящий объект не совпадает, Hapi ответит таким сообщением.
{ "statusCode": 400, "error": "Bad Request", "message": "\"firstName\" is required" }
Если входящая полезная нагрузка соответствует, мы можем выполнить нашу бизнес-логику и ответить сообщением об успешном завершении.
Сводка
Я даже не коснулся поверхности готовых функций, которые может предложить Hapi, таких как JWT2, Swagger, Nes, Good, ограничение скорости и многие другие. Но я хотел продемонстрировать краткое введение в Hapi и объяснить, почему вы должны его использовать!