Быстрая декларативная структура для написания веб-серверов, без пустяков.

Bliz поддерживает HTTP-серверы, серверы реального времени с Socket.io и серверы GraphQL с удаленной сшивкой схем.

Проблема

Сначала я хотел понять, как работают популярные фреймворки веб-серверов, такие как express.js и koa.js, и в процессе я понял, что могу создать что-то, что сделает написание веб-серверов в моей компании и для меня немного проще, особенно с Graphql. Если вы когда-то работали в компании, где работает ›500 человек, вы знаете, что сложно внедрять новые идеи, стили архитектуры и языки, потому что, честно говоря, ни у кого нет времени, поэтому я подумал, почему бы не обернуть собственный http-модуль Node, socket. io и graphql-tools во что-то декларативное и простое в использовании, чтобы люди не испугались, когда они это увидят, и я мог бы каким-то образом подтолкнуть нашу компанию к еще более совершенным методам и несколько схожей кодовой базе.

Решение

Bliz.js - это фреймворк, который позволяет создавать серверы HTTP / Socket.io / GraphQL в кратчайшие сроки и без дополнительных зависимостей.

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

Чем не является эта библиотека:

  1. Он находится в его подгузниках (версия 0.2.0), поэтому я не рекомендую использовать его в продакшене до выхода версии 1.0.0 (надеюсь, что это произойдет в ближайшее время). Поддержка будет оценена!
  2. У него нет механизма рендеринга или чего-то подобного, он предназначен исключительно для создания API Restful / realtime / graphql. Может быть, в будущем это изменится.

Давайте перейдем к рассмотрению нескольких примеров сервера GraphQL. Обратите внимание, что вы должны понимать, как работает GraphQL, чтобы использовать Bliz. Подробнее о GraphQL можно прочитать здесь. Примеры использования серверов Bliz http / socket.io можно найти в README на Github.

Мы создадим простой API-интерфейс graphql для сборщика еды с подписками и мутациями. Наша доставка будет разделена по этажам. Вот обзор потока

Структура будет выглядеть так

В нашем Schema.js есть тип Restaurant с несколькими полями.

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

В нашем файле Resolvers.js есть стандартный запрос, который возвращает рестораны по этажам, которые мы прошли. У объекта ресторана есть свои преобразователи полей, на случай, если вам понадобится настраиваемое форматирование поля, и, наконец, у нас есть Мутация и Подписка.

Обратите внимание, что Bliz внедряет вспомогательные функции pubsub и withFilter в Mutation и Subscription. Внедренный pubsub является локальным эмиттером событий, хотя вы можете добавить свою собственную реализацию pubsub, такую ​​как Redis pubsub, если он реализует AsyncIterator.

Мы просто публикуем событие о мутации и подписываемся на него в Подписке, вот и все :)

Наш Restaurant-index.js объединяет нашу схему и преобразователи, обратите внимание, как мы передаем ему наше основное приложение. Такой стиль написания делает весь ваш код модульным и более тестируемым.

Здесь мы заявляем о нашем запросе, изменении и подписке. Таким образом, мы знаем, какую схему мы используем, какой преобразователь и чего ожидать при работе с Restaurant в нашем API.

Наш основной index.js просто создает новый экземпляр Bliz с помощью фабричной функции. Обратите внимание, что мы связываем prettyPrint () - функцию, которая печатает все события вашего веб-сокета, если у вас есть какие-либо зарегистрированные, и все маршруты http, если у вас есть сервер http. У Bliz есть много доступных опций и конфигураций, все будет в документации, как только она будет завершена.

Мы регистрируем схему нашего ресторана, и у нас есть сервер graphql, запущенный и работающий на порту 4000 с игровой площадкой graphiql и подписками ws: // localhost: 4000 / для некоторой пользы в реальном времени автоматически.

Микросервисы с Близ

Bliz позволяет мгновенно создавать микросервисы, такие как ресторанный сервис, указанный выше, это возможно благодаря сшивке схемы GraphQL за кулисами. Давайте посмотрим, как мы создадим шлюз, чтобы объединить все эти микросервисы в одну.

Допустим, у нас работают 2 службы, как мы можем запросить их обе и отвлечь их от клиента? Мы просто вызываем регистр BlizRemoteGraphQlSchemas.

Теперь все, что у вас есть на обоих сервисах, будет проходить через шлюз, включая подписки.

Заключение

У нас были люди, которые писали разное программное обеспечение с разными стилями и пакетами. Позже мы увидели, что Bliz позволяет создавать все виды API за небольшой промежуток времени, без зависимостей и без большого количества кода. Все последнее имеет решающее значение для людей, чтобы быстро начать писать программное обеспечение, и я надеюсь, что Bliz поможет создать более простые и удобные в обслуживании API.

P.S.

С Bliz нужно написать много тестов, создать документацию, внести изменения и построить проекты. Мы будем приветствовать любой вклад, и я надеюсь, что вместе мы сможем создать что-то удивительное. Не стесняйтесь клонировать проект и отправлять запросы на вытягивание с исправлениями / идеями / функциями.