Статьи

REST to GraphQL в считанные минуты

Учитывая все безумие, которое в настоящее время происходит в мире API с  GraphQL , вы можете задаться вопросом, как перенести существующие API REST в GraphQL, ничего не нарушая. Это руководство поможет вам выполнить миссию REST to GraphQL без изменения базы кода, чтобы вы могли выполнить REST с GraphQL (каламбур)!

ОТДЫХ на GraphQL

Ну, сторонники GraphQL уже проделали большую работу по  маркетингу GraphQL  . Уважая их усилия, я не буду вдаваться в подробности, но приведу резюме:

  • GraphQL позволяет получать несколько ресурсов за один запрос.
  • GraphQL решает проблему чрезмерной загрузки REST, позволяя вам описать ваши точные потребности в данных.
  • GraphQL помогает вам решить проблему N + 1 запросов во внешнем интерфейсе, выбирая связанные данные в одном запросе.

Вместо этого в этом руководстве я затрону тот аспект, который большинство людей упускают при защите GraphQL, а именно:  «Мы уже вложили значительные средства в REST». Это означает:

  • Большинство наших существующих услуг находятся в REST
  • Нам удобнее писать REST услуги
  • Мы хотим поддерживать существующих клиентов, используя REST API

Хотя многие статьи помогают вам перейти с REST на GraphQL, все они заставляют вас изменить существующую кодовую базу или написать новую перед вашими REST-сервисами.

Вы также можете подумать:  зачем и когда использовать GraphQL

Но ждать…

Если это работает, то не трогай это.

Разве это не было первым правилом программирования?

Миграции могут быть болезненными, особенно масштабы огромного кода могут быть пугающими. Всегда есть шанс что-то сломать.

Почему мы не можем просто отдохнуть?

Посмотрим правде в глаза, мы все ленивы по своей природе. Мы любим простые взломы и простые решения.

Что, если бы был способ, которым вы могли бы сохранить свои службы REST как есть и при этом по-прежнему получать слой GraphQL поверх него без какого-либо написания кода? Звучит как магия, верно? Что ж,  Space Cloud  помогает сделать это возможным.

Что такое космическое облако?

Для простоты Space Cloud — это веб-сервер с открытым исходным кодом, который предоставляет мгновенные API GraphQL и REST для вашей базы данных и микросервисов.

Самое классное в Space Cloud — это то, что все API работают в реальном времени. При желании вы можете  подписаться  на изменения в базе данных. Эта функциональность пригодится при создании приложений в реальном времени.

Однако в этом руководстве мы будем использовать remote service модуль Space Cloud  для переноса ваших REST-сервисов в GraphQL.

Архитектура

Вот как выглядит окончательная архитектура GraphQL поверх REST:

Ваши приложения отправляют запрос GraphQL в Space Cloud, который, в свою очередь, попадает в конечную точку REST на вашем сервере. В этом случае Space Cloud выступает в качестве прокси-сервера GraphQL или шлюза API.

Как вы могли заметить, Space Cloud — это отдельный слой GraphQL, расположенный поверх ваших REST-сервисов. Прелесть этого факта в том, что ваши  REST-сервисы все еще не повреждены , и вы можете использовать их непосредственно в существующих клиентах. Этот факт позволяет вам отправлять REST-сервис в GraphQL, не ломая старых клиентов.

Большой! Мы поняли, что такое Space Cloud и как оно работает с нашим приложением. Давайте перейдем прямо к действию!

Что мы будем строить

В этом руководстве мы будем создавать простой арифметический сервис, который имеет следующие конечные точки:

  • Конечная точка сумматора: POST /adder
  • Конечная точка удвоителя: GET /doubler/:num

Конечная точка сумматора вернет сумму двух чисел, полученную по запросу  body. Конечная точка удвоителя, с другой стороны, вернет двойное число, полученное в качестве  URL path parameter.

Большой! Давайте начнем строить вещи сейчас!

Примечание:  не беспокойтесь, если вы застряли где-нибудь. Вы всегда можете пропинговать меня на этом  сервере Discord , и я помогу вам лично.

Шаг 1: Написание службы

Примечание.  Даже если вы сейчас читаете это со своего мобильного телефона, вы все равно можете следовать этому руководству, просто читая.

Давайте начнем с написания нашего сервиса REST. Мы собираемся написать наш REST-сервис в NodeJS, используя Express.

Примечание.  Вы можете написать свою службу на любом языке или в любой среде, если она поддерживает HTTP, поскольку именно этот протокол Space Cloud будет использовать для связи с вашей службой REST.

Сначала создайте папку, которая будет служить нашим рабочим каталогом.

Создать проект NPM:


Джава