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

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 9 октября 2018 г.

08:26:13 ДП
User 128597654
К двум описанным “неубедительным” вариантам подключения к базе данных есть вопросы.

1. В базу данных SQL в любом случае уходят запросы select, update, set, remove. В какой последовательности обрабатываются условия where, order, having, union, join, context table expression это решать для SQL. Например, PostgreSQL, сам определяет как выполнить запрос, в зависимости от индексов, структуры и т.д. Если написание sql вызывает фрустрацию, имеет смысл использовать query builder, такой как knexjs (JavaScript). Здесь также присутствует инструмент автозаполнение. И это не чистые строки, которые могут водвергнуться sql injection.

2. Призма все еще остается ORM и сравнение идет с другими ORM со всеми плюсами и минусами. Почему бы не поговорить о минусах первого? Минусы занимают бОльшое количество времени в работе. Как обычно любой уровень абстракции, в том числе ORM, это путь изучения. Рост профессиональных навыков и фич, которые можно реализовать в умеренное время, будет прямо пропорционален возможностям ORM, т.е. чего не умеет ORM или нестандартно для него, потребует резкого выхода из зоны комфорта, как следствие времени для реализации бизнес требования. Например, этот типичный и в тоже время необычный по своему запрос.

select SUM(case when seen_at is null then 1 else 0 end) from "app"."events"
  left join app.events_users
  on events_users.id = (
    select id from app.events_users
    where user_id = "5a674f1c-ct5e-11e8-9kb2-03d840d1e489" and event_id = events.id
    limit 1
  )
 where ((
    array[1]::integer[] <@ cities
    or ARRAY(select country_id from app._cities where city_id = 1) <@ countries
  )
  and approved = true and archived_at is null
  and coalesce(start_time, CURRENT_TIMESTAMP) <= CURRENT_TIMESTAMP
  and CURRENT_TIMESTAMP <= coalesce(end_time, CURRENT_TIMESTAMP)
) limit 1
08:30:13 ДП
User 99248986
User 128597654
К двум описанным “неубедительным” вариантам подключения к базе данных есть вопросы.

1. В базу данных SQL в любом случае уходят запросы select, update, set, remove. В какой последовательности обрабатываются условия where, order, having, union, join, context table expression это решать для SQL. Например, PostgreSQL, сам определяет как выполнить запрос, в зависимости от индексов, структуры и т.д. Если написание sql вызывает фрустрацию, имеет смысл использовать query builder, такой как knexjs (JavaScript). Здесь также присутствует инструмент автозаполнение. И это не чистые строки, которые могут водвергнуться sql injection.

2. Призма все еще остается ORM и сравнение идет с другими ORM со всеми плюсами и минусами. Почему бы не поговорить о минусах первого? Минусы занимают бОльшое количество времени в работе. Как обычно любой уровень абстракции, в том числе ORM, это путь изучения. Рост профессиональных навыков и фич, которые можно реализовать в умеренное время, будет прямо пропорционален возможностям ORM, т.е. чего не умеет ORM или нестандартно для него, потребует резкого выхода из зоны комфорта, как следствие времени для реализации бизнес требования. Например, этот типичный и в тоже время необычный по своему запрос.

select SUM(case when seen_at is null then 1 else 0 end) from "app"."events"
  left join app.events_users
  on events_users.id = (
    select id from app.events_users
    where user_id = "5a674f1c-ct5e-11e8-9kb2-03d840d1e489" and event_id = events.id
    limit 1
  )
 where ((
    array[1]::integer[] <@ cities
    or ARRAY(select country_id from app._cities where city_id = 1) <@ countries
  )
  and approved = true and archived_at is null
  and coalesce(start_time, CURRENT_TIMESTAMP) <= CURRENT_TIMESTAMP
  and CURRENT_TIMESTAMP <= coalesce(end_time, CURRENT_TIMESTAMP)
) limit 1
это еще и двухуровневая орм. то есть про контроль над системой можно забыть вообще
08:31:22 ДП
User 267858911
Мне кажется её стоит использовать как вторую, вспомогательную orm, тогда будет и удобно и где надо быстро
08:32:22 ДП
User 99248986
а не оверхед поднимать всю эту махину для вспомогательной орм?
08:33:06 ДП
User 267858911
Ну, в каком смысле оверхед? По нагрузке на железо?
08:34:04 ДП
User 99248986
По комплексити системы
08:35:01 ДП
User 267858911
А, ну это да, есть немного, это уже от команды зависит, как быстро и насколько сложно ей будет понять призму
08:35:43 ДП
User 99248986
Не только понять но и поддерживать включая инстанс
08:38:11 ДП
User 267858911
У меня сейчас задача сделать e-commerce платформу, там кууча сущностей, и писать простые круды очень лень, особенно учитывая что нужно выкатить MVP за месяц+-, и вот в таком случае призма мне показалась очень неплохим решением, особенно потому что API будет на GraphQL. Поддерживать да, сложнее.
08:39:04 ДП
User 267858911
А потом потихоньку, после релиза можем начать переписывать все на node-postgres какой-нибудь
08:40:31 ДП
User 99248986
Куча либ генерит круд из схемы базы
08:40:48 ДП
User 99248986
Всё ещё не пойму зачем призма
08:41:05 ДП
User 267858911
User 99248986
Куча либ генерит круд из схемы базы
Какие? Я искал, не нашел как-то
08:41:17 ДП
User 99248986
Какая база?
08:41:31 ДП
User 267858911
User 99248986
Какая база?
Pg
08:41:43 ДП
User 99248986
Постграфиль
08:42:26 ДП
User 267858911
Он api круд генерит или код?
08:42:30 ДП
User 267858911
Вроде api
08:43:29 ДП
User 267858911
А ещё он медленнее, если верить графикам на сайте призмы
08:44:16 ДП
User 267858911
А ещё мне понравилось что одну SDL схему в призме можно юзать и для api, и для бд, и миграции очень клевые
08:44:57 ДП
User 267858911
Я кстати нашел пока только один баг (или я что-то не понял) в призме - это когда делаешь мутацию updateManyXs и внутри делаешь update не scalar значения, а объекта, внутреннюю мутацию, вот внутренняя мутация не пашет чёт
08:55:14 ДП
User 128597654
User 267858911
Я кстати нашел пока только один баг (или я что-то не понял) в призме - это когда делаешь мутацию updateManyXs и внутри делаешь update не scalar значения, а объекта, внутреннюю мутацию, вот внутренняя мутация не пашет чёт
а что если одно значение будет с ошибкой, для всех остальных будет rollback?
08:57:53 ДП
User 267858911
User 128597654
а что если одно значение будет с ошибкой, для всех остальных будет rollback?
А, да, и транзакции еще, я хз как в призме, есть они или нет
08:58:25 ДП
User 267858911
User 267858911
А, да, и транзакции еще, я хз как в призме, есть они или нет
Не проверял еще
10:04:29 ДП
User 144022504
User 267858911
А, да, и транзакции еще, я хз как в призме, есть они или нет
есть
https://www.prisma.io/features/databases/
10:33:20 ДП
User 144022504
User 267858911
А ещё он медленнее, если верить графикам на сайте призмы
что за графики?
10:35:08 ДП
User 144022504
User 267858911
А потом потихоньку, после релиза можем начать переписывать все на node-postgres какой-нибудь
в node-postgres разве есть subscriptions ?
10:51:23 ДП
User 267858911
Графики
10:51:23 ДП
User 267858911
Screenshot (Oct 7, 2018 4:10:09 PM)
10:54:24 ДП
User 267858911
https://www.prisma.io/features/query-engine/
prisma.io/features/query-engine
Prisma is a performant open-source GraphQL ORM-like layer doing the heavy lifting in your GraphQL server.
10:54:33 ДП
User 267858911
Тут графики
10:54:43 ДП
User 267858911
User 144022504
в node-postgres разве есть subscriptions ?
Хз, вроде нет
10:56:40 ДП
User 267858911
User 144022504
есть
https://www.prisma.io/features/databases/
А несколько мутаций, вложенных, будут как транзакция выполняться?
10:58:28 ДП
User 144022504
User 267858911
А несколько мутаций, вложенных, будут как транзакция выполняться?
сорри, не вкурсе
10:58:45 ДП
User 144022504
User 267858911
https://www.prisma.io/features/query-engine/
prisma.io/features/query-engine
Prisma is a performant open-source GraphQL ORM-like layer doing the heavy lifting in your GraphQL server.
спасибо!
10:58:45 ДП
User 210944655
Димка Реактнативный (0) увеличил репутацию Uxname (1)
01:23:34 ПП
User 329116211
ребят, мне поручили на запущенном проекте переделать всё под graphql с чего стоит начать это дело?
01:25:57 ПП
User 99248986
почитать что это такое
01:27:43 ПП
User 329116211
почитать я почитал
01:41:21 ПП
User 267858911
Запусти hello world
01:42:12 ПП
User 267858911
Я бы делал на Apollo
01:42:35 ПП
User 99248986
User 329116211
ребят, мне поручили на запущенном проекте переделать всё под graphql с чего стоит начать это дело?
какой стек
01:43:22 ПП
User 124962553
User 329116211
ребят, мне поручили на запущенном проекте переделать всё под graphql с чего стоит начать это дело?
спросить "зачем?" ))
01:49:31 ПП
User 338769564
User 329116211
ребят, мне поручили на запущенном проекте переделать всё под graphql с чего стоит начать это дело?
с авторизации и распределением прав доступа
03:52:45 ПП
User 352892335
User 329116211
ребят, мне поручили на запущенном проекте переделать всё под graphql с чего стоит начать это дело?
уточнить о чем речь, о бэке или о фронте))
03:56:02 ПП
User 584555800
prisma/prisma 1.17.2 → 1.18.0 🎉
04:08:22 ПП
User 329116211
User 352892335
уточнить о чем речь, о бэке или о фронте))
Я фронт , и буду писать фронтовую часть, но в то же время мне надо объяснить, как на бэке это всё реализовывается , если есть возможность на php то просто объяснить , если js (node) то самому и Бэк и фронт пилить
04:12:19 ПП
User 352892335
Если  фронт большой и нужны будет пагинация, авторизация тп. то лучше брать клиент Apollo. Если просто по мелочи и быстро то можно graphql-request
04:12:49 ПП
User 147656592
User 124962553
спросить "зачем?" ))
Очень правильная мысль. Дело, конечно, не моё, но когда технологические решения спускаются сверху, потому что "модно" и "все сейчас так делают" это редко хорошо заканчивается.
04:33:59 ПП
User 99248986
мне кажется если нет конкретных вопросов, то все плохо
04:56:50 ПП
User 338769564
User 147656592
Очень правильная мысль. Дело, конечно, не моё, но когда технологические решения спускаются сверху, потому что "модно" и "все сейчас так делают" это редко хорошо заканчивается.
+
04:56:52 ПП
User 210944655
yozh kek (0) увеличил репутацию I Vasilyev (1)
06:23:27 ПП
User 118564668
User 329116211
Я фронт , и буду писать фронтовую часть, но в то же время мне надо объяснить, как на бэке это всё реализовывается , если есть возможность на php то просто объяснить , если js (node) то самому и Бэк и фронт пилить
На пыхе есть решения, коллега пыхарь, который топил за рест раньше, сейчас graphql очень доволен. Там два основных решения есть, про это @SerafimArts лучше расскажет
06:36:22 ПП
User 124962553
User 329116211
Я фронт , и буду писать фронтовую часть, но в то же время мне надо объяснить, как на бэке это всё реализовывается , если есть возможность на php то просто объяснить , если js (node) то самому и Бэк и фронт пилить
бек может пилить и простой рест, а  gate можно уже самому написать
10:46:44 ПП
User 244060545
Объясните, GraphQL в связке с Apollo позволяет контроллировать state? Есть ли какой-нибудь учебный материал с примерами?
10:47:28 ПП
User 169125
User 244060545
Объясните, GraphQL в связке с Apollo позволяет контроллировать state? Есть ли какой-нибудь учебный материал с примерами?
https://www.apollographql.com/docs/link/links/state.html apollo-link-state
apollographql.com/docs/link/links/state.html
Manage your local data with Apollo Client
10:48:35 ПП
User 244060545
Спасибо!