Библиотека MONARQ - это легкий промежуточный пакет, который позволяет серверам GraphQL принимать запросы RESTful API

Упущенная проблема с переходом на GraphQL

Не всем легко сесть на поезд GraphQL. С начала 2000-х годов архитектура в стиле REST использовалась для создания приложений для выполнения запросов API. Несмотря на появление GraphQL и его быстрое внедрение, код за два десятилетия не сразу становится совместимым с GraphQL. Хотя вы, возможно, перешли на GraphQL, многие из ваших клиентов, как внутренних, так и внешних, могут этого не сделать. Тем не менее, им по-прежнему необходимо взаимодействовать с вашим приложением и получать доступ к данным. У клиентов может не быть ресурсов для перехода на GraphQL, или они опасаются, что миграция их кодовой базы приведет к целому ряду критических изменений. Эти препятствия не должны мешать вам предоставлять доступ к API всем вашим клиентам.

Как MONARQ решает эту проблему

MONARQ - это сервис поверх GraphQL, который позволяет потребителям данных избежать смены парадигмы и соответствующей кривой обучения. Наш пакет npm позволяет вам указать конечные точки REST, которые вы хотите предоставить, и добавляет простой экспресс-маршрутизатор для синтаксического анализа этих запросов в запросы GraphQL, которые могут обрабатываться вашей существующей серверной архитектурой. После реализации MONARQ ваши клиенты смогут отправлять стандартные запросы REST API на указанные конечные точки, и ваше приложение с легкостью их обработает. С помощью некоторых простых пользовательских входов в две функции, теперь у вас есть новый экземпляр Express Router, который будет заполнен предопределенными путями, которые будут интерпретировать, какой запрос GraphQL должен быть выполнен.

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

Вы познакомили меня с GraphQL, теперь приступим

Первый шаг - выбрать конечные точки и действия, которые вы хотите предоставить через новый шлюз RESTful. Для этого вы создадите объект-манифест. Объект Manifest - это легенда, в которой перечислены все поддерживаемые конечные точки REST, их соответствующие методы HTTP и соответствующие им операции GraphQL. Для этого требуется, чтобы у вас уже была действующая схема GraphQL, но если у вас ее нет, просто обязательно настройте ее, прежде чем двигаться дальше.

Для структурирования объекта вам нужно будет следовать определенному плану, но это невероятно просто. Как показано в примере ниже, Manifest Object - это вложенный объект с рядом ключей, которые описывают доступные конечные точки REST. Посетите наш GitHub для получения полной информации.

Строки 3–7 добавляют поддержку запросов GET, отправленных по пути / book /: id (где пользователь указывает идентификатор книги). Вы решаете, какая операция GraphQL должна выполняться при выполнении этого запроса. В данном случае запрос «getBook».

Клиент отправит запрос как стандартный запрос REST. MONARQ поймает его, а затем проанализирует в запрос GraphQL, соответствующий типу запроса «getBook». Затем маршрутизатор передаст его вашему серверу для ответа на запрос, как это было бы для запроса GraphQL. Ответ является подлинным, поэтому он поддерживает структуру, которая уже существует на вашем сервере.

Объект манифеста может быть создан вручную в вашем каталоге. Или…

С легкостью создавайте свой объект-манифест

Мы понимаем, что все ваши коллеги пишут ужаснейший беспорядок кода, который мать не могла полюбить. Как и вы, ваш код совершенно потрясающий, он выходит за рамки масштаба. В основном бинарный моби-член. Но на всякий случай, если вы хотите, чтобы жизнь ваших «сослуживцев» была немного проще. Мы создали прототип приложения Manifest Builder на нашем сайте, теперь вся боль, связанная с форматированием и точным синтаксисом, ушла.

На одну ошибку для книг меньше, будущее довольно крутое.

Собираем все вместе

После того, как вы создали свой объект-манифест, все, что вам нужно, - это несколько строк кода, чтобы завершить реализацию MONARQ. Вы вызовете две функции и определите одну в главном файле сервера.

Есть две основные функции, благодаря которым происходит волшебство. Первый, queryMap, сопоставляет операции, которые вы включили в свой объект манифеста, со строками запроса GraphQL. Эти строки запроса будут использоваться после преобразования запроса из REST в GraphQL. MONARQ генерирует полностью развернутую версию запроса для любых операций, сопоставленных с конечной точкой REST.

Второй, routerCreation, генерирует Express Router, который содержит обработчики маршрутов для каждой конечной точки REST. Когда запрос получен, обработчики маршрута будут вызывать выполнение запроса GraphQL для соответствующего запроса, сгенерированного queryMap.

Одним из обязательных аргументов для routerCreation является функция выполнения. Это функция, которую вы определите, и она должна быть тем методом, который ваш сервер в настоящее время использует для выполнения запросов GraphQL, заключенным в функцию executeFn для стандартизации входных данных. Это дает вам гибкость в использовании любого метода, который вы предпочитаете для выполнения запросов GraphQL. В приведенном ниже примере используется собственный метод graphql из GraphQL.js.

После создания маршрутизатора внедрите его на свой сервер Express с помощью обработчика маршрута для всех входящих запросов REST. Для этого выберите путь верхнего уровня для всех конечных точек REST, например «/ api».

Теперь ваше приложение готово принимать запросы REST и GraphQL!

Завершите метаморфозу!

MONARQ только начинается! Присылайте нам свои комментарии, вопросы, предложения, конструктивные отзывы (это не Reddit) и мысли о любых других забавных функциях, которые вы хотели бы реализовать. Мы любим создавать для вас крутые штуки :)

Удачного запроса!

"Посетите наш сайт!"

Ознакомьтесь с нашим файлом Readme на Github!

Свяжитесь с нами по электронной почте! [email protected]

Познакомьтесь с командой MONARQ

Петр Баниушевич | LinkedIn | Github

Эми Чен | LinkedIn | Github

Тайлер Кнайдл | LinkedIn | Github

Елена Регула | LinkedIn | Github

MONARQ - это бета-продукт, разработанный OSLabs