Часто при работе с корпоративными клиентами я работаю над микросервисами. Эти микросервисы часто представляют собой приложения 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 и объяснить, почему вы должны его использовать!