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

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

352 members

Архив канала @graphql_ru 23 мая 2018 г.

01:57:26 ДП
User 481349
User 43503298
Prisma топчик. Это инструмент для создания GraphQL интерфейса к БД.

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

Одна из киллер фич - это подписки. Без призмы вы будете сами писать резолвер своей подписки, а это для стандартных баз не так-то просто. Тут нужен либо event sourcing, либо какие-то либы типа papertrail чтобы ловить апдейты в бд. В призме это уже есть все.

Другая киллер фича это то, что без призмы вы пишите резолв функции через SQL запросы. С призмой вы этого не делаете. Призма генерирует GraphQL CRUD интерфейс к БД. Таким образом, в пишите GraphQL запрос, а призма сама из него формирует SQL.
Правильно понимаю что призма позволяет написать слой бизнес логики поверх своего слоя резолверов(CRUD)? 

Если мне нужен только CRUD от призмы, могу я описать только сущности в своей системе и этим ограничится? Или все равно описывать в схеме запросы/мутации/подписки придется?
02:11:51 ДП
User 481349
User 43503298
Prisma топчик. Это инструмент для создания GraphQL интерфейса к БД.

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

Одна из киллер фич - это подписки. Без призмы вы будете сами писать резолвер своей подписки, а это для стандартных баз не так-то просто. Тут нужен либо event sourcing, либо какие-то либы типа papertrail чтобы ловить апдейты в бд. В призме это уже есть все.

Другая киллер фича это то, что без призмы вы пишите резолв функции через SQL запросы. С призмой вы этого не делаете. Призма генерирует GraphQL CRUD интерфейс к БД. Таким образом, в пишите GraphQL запрос, а призма сама из него формирует SQL.
Еще есть reindex.io
05:04:52 ДП
User 43503298
User 481349
Правильно понимаю что призма позволяет написать слой бизнес логики поверх своего слоя резолверов(CRUD)? 

Если мне нужен только CRUD от призмы, могу я описать только сущности в своей системе и этим ограничится? Или все равно описывать в схеме запросы/мутации/подписки придется?
В призме мутации и не описываются, там только сущности.

Бизнес логика пишется поверх, да. В отдельном GraphQL сервере, который сам по себе
05:10:39 ДП
User 481349
User 43503298
В призме мутации и не описываются, там только сущности.

Бизнес логика пишется поверх, да. В отдельном GraphQL сервере, который сам по себе
То есть будет два GraphQL сервера, твой собственный и тот что призма дает. А могу я свой не писат вообще, обойтись только тем что призма дает?
05:15:52 ДП
User 43503298
User 481349
То есть будет два GraphQL сервера, твой собственный и тот что призма дает. А могу я свой не писат вообще, обойтись только тем что призма дает?
Да, можно обойтись и одним, тем что даёт призма, но тогда у клиента, который пользуется апи, будет полный CRUD доступ, что может не совсем хорошо
05:16:57 ДП
User 481349
Отлично, спасибо, это помогло разобраться.
05:16:59 ДП
User 43503298
Надо ещё смотреть, как реализовывать логины пользователей, если нет прослойки. Возможно, https://graphqlweekly.us13.list-manage.com/track/click?u=7d1e6cd0bc1c35d65ab354ad5&id=f4363126f9&e=87d0512adf
github.com/Volst/prisma-auth
prisma-auth - 🔑 Authentication services for Prisma (GraphQL).
05:18:13 ДП
User 481349
User 43503298
Надо ещё смотреть, как реализовывать логины пользователей, если нет прослойки. Возможно, https://graphqlweekly.us13.list-manage.com/track/click?u=7d1e6cd0bc1c35d65ab354ad5&id=f4363126f9&e=87d0512adf
github.com/Volst/prisma-auth
prisma-auth - 🔑 Authentication services for Prisma (GraphQL).
Это как раз один из таких middleware, про который ты говорил выше.
05:18:47 ДП
User 481349
А сама призма не дает что то вроде ACL via JWT?
05:33:26 ДП
User 43503298
Вроде нет, надо смотреть, но вроде вся защита призмы это api token, он один на всех
05:35:04 ДП
User 43503298
Призма это тоже самое, что поднять БД с альтернативным интерфейсом в виде GraohQL. От БД ведь не ждут, что в ней из коробки будет идти ACL и user management.
05:43:44 ДП
User 481349
Например, есть такой проект — postgrest. Он как раз это делает, кроме прочего. Это что то вроде postgraphile, но для обычного rest. Думаю это было бы хорошо, иметь ACL with JWT для призмы. Это не сложно делается. И уже есть примеры, можно подсмотреть
05:45:01 ДП
User 481349
И да, судя по всему postgraphile и призма прямые конкуретны за внимание разработчиков.
09:05:34 ДП
User 357745820
всем привет, подскажите есть сообщество по амазон сервисам? aws Cognito, AppSync, Lambda ?
09:08:33 ДП
User 144022504
Во-первых я не заявлял что она отличается от других решений.
Во-вторых мне самому интересно проводить бэнчмаркинг на рынке технологий, поэтому и задал вопрос.
В-третьих, если ответить на ваш вопрос, то: 
 - у Призмы на данный момент комьюнити в слеке 9419 человек, помогающие друг другу оперативно решать таски, которые сам решал там не один раз.
 - у какого еще проекта так задокументированые рабочие примеры?
https://docs.commerceql.com/basics/setup
 - Призму зачетно профинансировали, а это значит можно не переживать о том, что проект забросят мейнтендеры в ближайшие годы.
 При прочих равных технических характеристик других решений на рынке, лично для меня перечислиные пункты немало важны.
docs.commerceql.com/basics/setup
09:09:22 ДП
User 144022504
User 228403837
ну так чем призма от других решений отличается?))
☝️
09:09:46 ДП
User 228403837
User 43503298
Prisma топчик. Это инструмент для создания GraphQL интерфейса к БД.

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

Одна из киллер фич - это подписки. Без призмы вы будете сами писать резолвер своей подписки, а это для стандартных баз не так-то просто. Тут нужен либо event sourcing, либо какие-то либы типа papertrail чтобы ловить апдейты в бд. В призме это уже есть все.

Другая киллер фича это то, что без призмы вы пишите резолв функции через SQL запросы. С призмой вы этого не делаете. Призма генерирует GraphQL CRUD интерфейс к БД. Таким образом, в пишите GraphQL запрос, а призма сама из него формирует SQL.
звучит как маркетинговый булшит
09:11:07 ДП
User 43503298
Конечно, а как ещё продвигать то (:
09:12:07 ДП
User 144022504
User 43503298
Конечно, а как ещё продвигать то (:
10:32:54 ДП
10:33:08 ДП
User 321317845
учитывая то, что всё есть и так
10:33:13 ДП
User 321317845
без призмы
10:35:32 ДП
User 321317845
только сабскрайберов пока что нет
10:36:19 ДП
User 321317845
ну т.е. в том что я использую
10:38:41 ДП
User 144022504
User 321317845
только сабскрайберов пока что нет
было дело подсел на graphql-comopose , а когда дошел до реализации подписок, пришлось на Призму перейти)
11:24:22 ДП
User 321317845
ну если задача исходит из бизнесовой, то да, призма тут вполне норм
11:25:49 ДП
User 321317845
ну т.е. если надо сделать "вчера" и не хочется исследовать рынок. Я это имел ввиду
11:30:32 ДП
User 321317845
На практике же всё что предлагает призма с прямым доступом к бд делается ровно в пару строчек кода
04:31:43 ПП
User 219116964
User 321317845
На практике же всё что предлагает призма с прямым доступом к бд делается ровно в пару строчек кода
И генерация input типов для фильтрации?
05:46:07 ПП
User 321317845
ну т.к. это минут за 5 делается же
05:48:00 ПП
User 321317845
input Query {
  orderBy: [String!]!
  where: [Where!]!
  take: Int
  skip: Int
}

input Where {
    field: String!
    value: Any
    op: Operation! = EQUAL
}

enum Operation { 
  EQUAL, ....
}
05:50:57 ПП
User 321317845
ну и маппинг:
input Query @in(action: "QueryInput@parse") { ... }

public function parse(array $query)
{
    $query = $this->repository; // Some repo

    $query->orderBy(...$query['orderBy']);
    ...

  return $query;
}
05:51:17 ПП
User 321317845
и при указании этого инпута в резолвере аргументах на руках будет весь запрос, осталось смерджить его с текущим стейтом и всё
05:54:20 ПП
User 321317845
@EugeneFedoseev если есть вопросы - спрашивай. Сразу замечу, что это решение, которое можно использовать в моём проекте, но не значит, что его нельзя перенести на какие-нибудь другие gql фреймворки
06:05:06 ПП
User 321317845
Кстати, у меня есть предположение, что призма является идеальным решением, если разработчик знаком непосредственно с нодой, но не с другими бекенд языками, т.к. на Ruby, Java, PHP и проч. есть решения на порядок гибче, вроде JDBC или DBAL
06:06:09 ПП
User 135278254
имхо всё это работает ровно до тех пор пока приложение достаточно простое в плане бизнес-логики
06:06:49 ПП
User 135278254
как только бизнес-логика усложняется придётся переходить с призмы на решения которые позволяют более гибко управлять различными частями
06:21:32 ПП
User 321317845
Ну фиг знает. Надо посмотреть на призму и вообще оценить в целом насколько решение гибкое и что-нибудь потырить
06:21:35 ПП
User 321317845
идеи т.е.
06:23:28 ПП
User 321317845
А т.к. я не смотрел и не пробовал призму и сужу лишь по словам "очевидцев", то гарантию дать не могу насколько это всё профитно
06:25:57 ПП
User 135278254
ну я тоже рассуждаю с точки зрения человека который слышал/читал но не пробовал
07:17:19 ПП
User 219116964
User 321317845
input Query {
  orderBy: [String!]!
  where: [Where!]!
  take: Int
  skip: Int
}

input Where {
    field: String!
    value: Any
    op: Operation! = EQUAL
}

enum Operation { 
  EQUAL, ....
}
То ли я не понял, то ли это не то, о чем я сказал
Я про SomethingWhereInput, со свойствами AND, OR, something_in и тд
07:22:26 ПП
User 219116964
User 321317845
input Query {
  orderBy: [String!]!
  where: [Where!]!
  take: Int
  skip: Int
}

input Where {
    field: String!
    value: Any
    op: Operation! = EQUAL
}

enum Operation { 
  EQUAL, ....
}
И разве можно ненулевому свойству дефолтовое значение присваивать?
Я про Operation! = EQUAL
09:36:26 ПП
User 321317845
в моём компиле можно)
09:37:14 ПП
User 321317845
но в js версии нельзя
09:44:14 ПП
User 321317845
Там ещё куча всяких штук есть, в принципе: https://github.com/railt/railt/projects/1 Если есть ещё какие идеи - предлагайте смело. Вполне возможно руки дойдут до отдельного бинарника, который сможет это в обычный sdl конвертить. Разработки в этом направлении уже есть в принципе.
github.com/railt/railt/projects/1
railt - A PHP GraphQL Framework