В прошлом месяце наша компания провела второй хакатон. Смотрите серию на нашем первом хакатоне.
Во время предыдущего хакатона мы построили GraphQL-сервер для получения некоторых данных из нашего REST API. Я решил расширить это и реализовать еще одну замечательную функцию GraphQL — подписки.
Что такое подписки?
Подписки позволяют клиентам GraphQL прослушивать данные на стороне сервера через веб-сокет. Это позволяет использовать функции в реальном времени без обновления браузера. Технически вы можете сделать то же самое, внедрив веб-сокет самостоятельно или используя сторонний инструмент, такой как Pusher. Тем не менее, подписки GraphQL имеют то преимущество, что они встроены в парадигму GraphQL, а библиотеки, такие как Apollo, поставляются с отличными инструментами и API. У вас также нет накладных расходов на управление сообщениями веб-сокетов или необходимость полагаться (или платить 💸) на сторонний сервис для работы в режиме реального времени.
Подписки следует использовать в тех областях приложения, где пользователи могут ожидать, что что-то произойдет в режиме реального времени.
Как это работает?
В нашем приложении ReviewTrackers пользователи могут оставлять заметки об отзывах для других пользователей. Скажем, я запускаю клиентскую часть мутации GraphQL, чтобы обновить примечание к обзору, после чего у меня может быть логика на стороне сервера, чтобы отправить обновленное примечание всем клиентам, подписавшимся на новые примечания.
Как показано на диаграмме, если у вас есть несколько клиентских приложений (в нашем случае веб-приложение и мобильное приложение), оба клиента получат обновление в режиме реального времени!
Заметки в реальном времени в действии
Сценарий обзорных заметок — это именно то, что я реализовал для хакатона. В нашем текущем приложении пользователям пришлось бы обновлять страницу, чтобы увидеть любые новые заметки, оставленные в отзывах. С подпиской на GraphQL пользователи могут видеть заметки по мере их поступления!
Уведомления
Вы могли заметить кнопку «Уведомления» в правом нижнем углу. Это потому, что эта кнопка также прослушивает ту же подписку на заметки!
Опыт разработки
GraphQL и подписки удивительны не только с точки зрения продукта/UX, но и с точки зрения разработчика. Вы только посмотрите, какой простой API для подписки!
Вы даже можете протестировать и поиграть с подписками в GraphiQL, как и с запросами!
Подписки без мутаций
Подписки не ограничиваются только реакциями на мутации GraphQL. Вы можете передавать любые данные на стороне сервера в подписку. Например, мы используем RabbitMQ для обработки событий на стороне сервера в ReviewTrackers. Потенциально мы могли бы настроить подписки для прослушивания любого события RabbitMQ, такого как новые обзоры, изменение статуса обзора и т. д.
Следующие шаги
За два хакатона наш сервер GraphQL действительно вырос и поддерживает все основные функции GraphQL — запросы, мутации и подписки. Вскоре мы планируем развернуть его как отдельную службу, которую смогут использовать наше веб-приложение и мобильное приложение.
Тебе понравилась эта статья? Присоединяйтесь к нашей крутой команде! Ознакомьтесь с нашими вакансиями здесь.