Size: a a a

GraphQL — русскоговорящее сообщество

2021 February 08

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
Roman Dynnik
Классы есть всегда. Класс - это сущность или понятие.
Вы видимо из мира джавы)))
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
Классы не всегда есть
источник

RD

Roman Dynnik in GraphQL — русскоговорящее сообщество
Aleksandr Bukhalo
Вы видимо из мира джавы)))
Я изо всех миров ) мне все оавно на чем...
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
В общем всё что выше про UML, классы, наследование моделей не имеет отношение к композу
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
Это тупой инструмент как отвёртка, ему скармливаешь типы, резолверы он выплёвывает схему — всё
источник

AB

Aleksandr Bukhalo in GraphQL — русскоговорящее сообщество
То про что вы пишите это уже абстракции разного вида
источник
2021 February 09

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Иван
Йоу

Поделитесь опытом, как кошерно шарить gql-схему между репозиторием, где эта схема описана, и репозиториями-клиентами. Моя хотелка — генерить typescript-декларации из схемы.


Вижу два варианта

— настроить сетап, который смотрит на сервер со схемой и по событию генерит декларации. Предвижу проблемы с доступностью и актуальностью этого сервера (надо накатить туда «тот самый» коммит, надо авторизовываться, иногда впн-туннель поднимать)

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


Как у вас? Какие есть подводные камни?
У нас либо монорепы. Либо скрипт помагайка который запускается перед стартом клиентского приложения в дев режиме. Схема стягивается уже с запущенного сервера (стейджинга, дева, либо ревью). Делается это с помощью graphql-codegen он много откуда умеет тянуть схемы.

Вот мой пример https://gist.github.com/nodkz/841ce4453fbaebf467caadd7914fe45d
источник

И

Иван in GraphQL — русскоговорящее сообщество
Pavel @nodkz
У нас либо монорепы. Либо скрипт помагайка который запускается перед стартом клиентского приложения в дев режиме. Схема стягивается уже с запущенного сервера (стейджинга, дева, либо ревью). Делается это с помощью graphql-codegen он много откуда умеет тянуть схемы.

Вот мой пример https://gist.github.com/nodkz/841ce4453fbaebf467caadd7914fe45d
а как помогайка узнаёт, с какого именно стейджинга тянуть?
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Roman Dynnik
@nodkz , Павел, я что то так до конца и не могу понять какие кейсы применения этого инструмента. Он для генерации SDL из каких-то других метаданных, например, хранящихся или предоставляемых в другой структуре?
https://github.com/graphql-compose/graphql-compose
Для своих редакторов?
это единственное применение или есть какие то еще кейсы?
graphql-compose это обертка над graphql-js.

graphql-js строит схему из конфига GraphQLObjectType и ежие с ними вложенными объектами.

graphql-compose позволяет этот конфиг собрать программным путем при запуске сервера. Т.е. он предоставляет регистр типов, SDL сахар создания этих самых типов и кучу методов для проверки наличия/создания/удаления полей, аргументов.

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

Другой кейс, есть mongoose модели или typeorm или elasticserch маппинги - так вот из них моно на автомате генерить графкуэль типы, удалять “секурные поля” и уже потом конструировать схему. Т.е. исчезает прописывание одних и тех же полей по два раза (в схеме модели и в графкуэль типе).



Все популярные js инструменты, типа graphql-tools, typegraphql, graphql-compose, nexus, gqtx, graphql mesh - занимаются тем, что тем или иным способом строят инстанс GraphQLSchema чтобы ее передать в пакет graphql-js, который будет выполняет в рантайме запросы на вашей схеме. Т.е. пакет graphql-js фокусируется на рантайме и предоставляет классы типов, чтоб вы ему собрали схему в виде древовидного “конфига”. И кто собирал это дело руками, знает насколько муторно все это дело и пытаются тем или иным способом все это дело упростить, построив поверх свой абстрактный уровень с методами помогайками.

Отличие graphql-compose от всех остальных конструкторов схем в том, что можно схему строить на базе стандартных логических операторов. Например, если схема не админская, то в типе юзер удали поле email:

if (process.env.APP_ROLE !== ‘admin’) {
  if (UserTC.hasField(‘email’) {
     UserTC.removeField(‘email’);
  }
}
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Иван
а как помогайка узнаёт, с какого именно стейджинга тянуть?
Это я не капал. Мы юзаем стейджинг на ветку мастер у нее всегда фиксированный урл. Возможно хост можно как-то законфигурировать через env переменные. Ну или через bash скрипт подменять (например через `envsubst < /template_deploy.yml > /deploy.yml`).

В любом случае это тема для самостоятельного ковыряния.
источник

И

Иван in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Это я не капал. Мы юзаем стейджинг на ветку мастер у нее всегда фиксированный урл. Возможно хост можно как-то законфигурировать через env переменные. Ну или через bash скрипт подменять (например через `envsubst < /template_deploy.yml > /deploy.yml`).

В любом случае это тема для самостоятельного ковыряния.
окей, спасибо 🙂
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Плюс можно в репке graphql-codegen написать Дотан Симха у них активно допиливает фичи.
источник

И

Иван in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Плюс можно в репке graphql-codegen написать Дотан Симха у них активно допиливает фичи.
сам пакет уже умеет всё, что должен уметь, он принимает url до схемы

вопрос принятия решения “какая именно схема”, как мне кажется, должен решаться уровнем выше
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Ну например автоматом подменять в строках значения из ENV переменных
schema: “${SCHEMA_HOST:http://localhost:9999}”
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
Типа если есть переменная то взять ее, либо поставить дефолтное значение
источник

И

Иван in GraphQL — русскоговорящее сообщество
Pavel @nodkz
Ну например автоматом подменять в строках значения из ENV переменных
schema: “${SCHEMA_HOST:http://localhost:9999}”
оооооо, и прикрутить лёгонькую CLI, которая перед стартом дев-сервера будет предалагть сделать выбор стейджа через Inquirer.js
источник

И

Иван in GraphQL — русскоговорящее сообщество
Иван
оооооо, и прикрутить лёгонькую CLI, которая перед стартом дев-сервера будет предалагть сделать выбор стейджа через Inquirer.js
вот так мне нравится 🙂
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
тока пока насколько знаю шаблоны они не поддерживают

Если откроете ишью, скиньте мне ссылку. Я там Дотана тегну, скажу класная фича. Это должно повлиять на скорость реализации )
источник

И

Иван in GraphQL — русскоговорящее сообщество
Pavel @nodkz
тока пока насколько знаю шаблоны они не поддерживают

Если откроете ишью, скиньте мне ссылку. Я там Дотана тегну, скажу класная фича. Это должно повлиять на скорость реализации )
не думаю, что это случится в ближайшем будущем, я пока только примеряюсь к задаче

да и если понадобится, я, наверное, просто переписал бы codegen.yml тем же скриптом, которым спрашивал бы про выбор стейджа
источник

И

Иван in GraphQL — русскоговорящее сообщество
Иван
не думаю, что это случится в ближайшем будущем, я пока только примеряюсь к задаче

да и если понадобится, я, наверное, просто переписал бы codegen.yml тем же скриптом, которым спрашивал бы про выбор стейджа
хотя, если бы была поддержка шаблонов, было бы классно, конечно 🙂
источник