В прошлом месяце наша компания провела второй хакатон. Смотрите серию на нашем первом хакатоне.

Во время предыдущего хакатона мы построили GraphQL-сервер для получения некоторых данных из нашего REST API. Я решил расширить это и реализовать еще одну замечательную функцию GraphQL — подписки.

Что такое подписки?

Подписки позволяют клиентам GraphQL прослушивать данные на стороне сервера через веб-сокет. Это позволяет использовать функции в реальном времени без обновления браузера. Технически вы можете сделать то же самое, внедрив веб-сокет самостоятельно или используя сторонний инструмент, такой как Pusher. Тем не менее, подписки GraphQL имеют то преимущество, что они встроены в парадигму GraphQL, а библиотеки, такие как Apollo, поставляются с отличными инструментами и API. У вас также нет накладных расходов на управление сообщениями веб-сокетов или необходимость полагаться (или платить 💸) на сторонний сервис для работы в режиме реального времени.

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

Как это работает?

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

Как показано на диаграмме, если у вас есть несколько клиентских приложений (в нашем случае веб-приложение и мобильное приложение), оба клиента получат обновление в режиме реального времени!

Заметки в реальном времени в действии

Сценарий обзорных заметок — это именно то, что я реализовал для хакатона. В нашем текущем приложении пользователям пришлось бы обновлять страницу, чтобы увидеть любые новые заметки, оставленные в отзывах. С подпиской на GraphQL пользователи могут видеть заметки по мере их поступления!

Уведомления

Вы могли заметить кнопку «Уведомления» в правом нижнем углу. Это потому, что эта кнопка также прослушивает ту же подписку на заметки!

Опыт разработки

GraphQL и подписки удивительны не только с точки зрения продукта/UX, но и с точки зрения разработчика. Вы только посмотрите, какой простой API для подписки!

Вы даже можете протестировать и поиграть с подписками в GraphiQL, как и с запросами!

Подписки без мутаций

Подписки не ограничиваются только реакциями на мутации GraphQL. Вы можете передавать любые данные на стороне сервера в подписку. Например, мы используем RabbitMQ для обработки событий на стороне сервера в ReviewTrackers. Потенциально мы могли бы настроить подписки для прослушивания любого события RabbitMQ, такого как новые обзоры, изменение статуса обзора и т. д.

Следующие шаги

За два хакатона наш сервер GraphQL действительно вырос и поддерживает все основные функции GraphQL — запросы, мутации и подписки. Вскоре мы планируем развернуть его как отдельную службу, которую смогут использовать наше веб-приложение и мобильное приложение.

Тебе понравилась эта статья? Присоединяйтесь к нашей крутой команде! Ознакомьтесь с нашими вакансиями здесь.