Спойлер: он называется Relay Modern.

В Q̶u̶r̶i̶ Trax (Quri была приобретена Trax в январе 2018 года) мы уже более года используем GraphQL в производственной среде. Мы начали с того, что просто заменили наши вызовы api Redux / REST некоторыми вручную построенными запросами GraphQL, и вскоре мы почувствовали необходимость принять GraphQL Client.

Мы начали экспериментировать и в конечном итоге приняли Relay для внутреннего проекта. Совсем недавно команда также начала использовать клиент Apollo. Заявление об ограничении ответственности: я лично предвзято отношусь к Relay, потому что, когда я начал искать клиентов, Apollo еще не вышел. Тем не менее, основными недостатками Relay были:

  • Отсутствие взаимодействия с сообществом: Relay - это проект, управляемый Facebook; Приоритеты Facebook могут не совпадать с приоритетами более широкого сообщества GraphQL.
  • API мутаций может быть трудным для понимания: вам нужно потратить время на документацию и фактически использовать ее, чтобы понять, что на самом деле делает RANGE_ADD . Честно говоря, API мутации на самом деле охватывает большинство, если не все, сценариев использования, которые могут понадобиться. Однако некоторые утверждают, что ему не хватает более дружелюбного императивного интерфейса. Из-за того, что он очень общий, иногда трудно понять, как просто «добавить и добавить элемент к соединению» (подсказка: просто используйте RANGE_ADD).
  • Эта кодовая база была недоступна для среднего разработчика.
  • Другие случайные запутанные части: запрос Маршруты на самом деле не являются маршрутами, как могло бы подумать большинство разработчиков React, мутация может принимать только один input: аргумент, корневые соединения не используются, если не используется трюк viewer.

Я лично следил за последними обновлениями с тех пор, как меня заинтересовал ReactJS Meetup в Кремниевой долине, где сначала был представлен технический обзор, а затем несколько недель спустя, когда тот же Грег Хурелл дал Deep Dive на внутренности.

С тех пор команда FB часто говорила о будущем Relay - и сообщество подхватило концепции: подписки, постоянные запросы - однако никогда не объявляли дату выпуска. Фактически, команды React / Relay известны тем, что отправляют в OSS только те проекты, которые, как оказалось, работают в производственной среде.

Тем не менее, я уже несколько месяцев проверял Список последних коммитов Relay и Заметки о встречах, и вот, после большой подготовительной работы, мы получили множество обновлений типов потоков, настройки тестов, наконец, большое Приземлился дифференциал синхронизация с OSS!

Это интересно не только потому, что это означает, что давно анонсированный Relay2 - назовем его сейчас Relay Modern - должен появиться хотя бы в альфа-версии, но мы также можем лучше понять, что включает в себя это переписывание. Команда пообещала, что эта новая версия будет более дружественной для сообщества, и они ее выполнили.

Действительно, Relay Modern теперь разделен на несколько слабосвязанных пакетов. Каждый пакет поставляется с ARCHITECTURE.md, который подробно объясняет роль и использование каждого пакета - это в основном для любопытных и будущих разработчиков API / плагинов, которые будут строить экосистему.

  • Relay Compiler: компилятор представляет собой набор модулей, предназначенных для извлечения документов GraphQL из всей кодовой базы, их преобразования / оптимизации и создания артефактов сборки. Примеры распространенных типов артефактов включают оптимизированный GraphQL для сохранения на вашем сервере, представления запросов во время выполнения для использования с клиентами GraphQL, такими как среда выполнения Relay, или сгенерированный исходный код для использования с платформами GraphQL для компилируемых языков (Java / Swift и т. Д.) . TL; DR; relay-compiler анализирует ваш код, считывает запросы или фрагменты GraphQL и выводит документы GraphQL, постоянные запросы, код, сгенерированный на другом языке (например, типы Swift или определения потока)
  • Relay Runtime: Relay Runtime - это полнофункциональный клиент GraphQL, разработанный для обеспечения высокой производительности даже на мобильных устройствах низкого уровня и способный масштабироваться до больших и сложных приложений. API среды выполнения не предназначен для использования непосредственно в коде продукта, а скорее служит основой для создания API продуктов более высокого уровня, таких как React / Relay. TL; DR; это новое ядро ​​ретрансляции, оно содержит основные механизмы хранения и кеширования.
  • React Relay: а-ля react-redux, этот пакет содержит привязки React. Независимость убирает часть связи с React и потенциально позволит другим библиотекам представлений использовать Relay. Он имеет 3 подпапки: classic содержит текущую реализацию, compact предоставит API совместимости, который позволит пользователям Relay постепенно переходить свои реализации и, наконец, modern , который содержит новые привязки.

Для получения дополнительных сведений о Relay Modern ознакомьтесь с проблемой [meta] GitHub.

Если вы хотите работать с отличной командой над проектами, которые используют GraphQL, передовые интерфейсные технологии, протяните руку, мы нанимаем!