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

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

352 members

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

Последние сообщения

11:39:19 ДП
User 352892335
хитрость в том, чтобы автоматически скинуть сразу все
11:39:50 ДП
User 267858911
а если что-то не нужно, то как быть?
11:40:04 ДП
User 267858911
скрыть например доступ к полю password_hash у юзера
11:40:28 ДП
User 267858911
или например вообще наружу не пробрасывать query -> users
11:41:46 ДП
User 267858911
или ладно, может у тебя есть пример  проекта с биндингами?
12:07:07 ПП
User 267858911
User 267858911
или ладно, может у тебя есть пример  проекта с биндингами?
нашел
https://github.com/graphql-boilerplates/node-graphql-server/tree/master/basic
github.com/graphql-boilerplates/node-graphql-server/tree/master/basic
Boilerplate code for scalable, production-ready GraphQL servers - graphql-boilerplates/node-graphql-server
12:10:58 ПП
User 352892335
User 267858911
скрыть например доступ к полю password_hash у юзера
посмотри на это https://github.com/maticzav/graphql-shield
github.com/maticzav/graphql-shield
🛡 A GraphQL tool to ease the creation of permission layer. - maticzav/graphql-shield
12:12:31 ПП
User 267858911
огонь, спаибо
12:16:14 ПП
User 267858911
а можешь подсказать, как привязать binding к проекту?
Я так понял нужно сделать схему бд, потом схему Query и Mutation, в которой нет сущностей, а только набор запросов и мутаций, и потом как?
12:28:26 ПП
User 352892335
https://www.prisma.io/docs/tutorials/-ohdaiyoo6c#step-5:-instantiate-the-prisma-binding
12:28:47 ПП
User 210944655
Uxname (1) увеличил репутацию UsulPro (1)
12:28:47 ПП
User 267858911
User 352892335
https://www.prisma.io/docs/tutorials/-ohdaiyoo6c#step-5:-instantiate-the-prisma-binding
спасибо
02:02:45 ПП
User 267858911
Кто знает, почему prisma-binding не возвращает внутренние поля. Например, когда запрашиваю prisma.query.products() - возвращает всё, кроме categories
02:04:01 ПП
User 267858911
а если явно прописать какие поля нужны - то всё ок,но не хотелось бы в будущем все запросы дописывать в случае изменения схемы
02:04:04 ПП
User 267858911
User 267858911
а если явно прописать какие поля нужны - то всё ок,но не хотелось бы в будущем все запросы дописывать в случае изменения схемы
02:12:19 ПП
User 267858911
User 267858911
как быть если у меня в категоряих могут быть подкатегории, рекурсивно
02:21:30 ПП
User 267858911
переделал под prisma-binding
06:00:20 ПП
User 417692616
Лично я, уже больше 4 месяцев работая на проекте, использующем кодогенерацию (не prisma, а собственное решение компании) уяснил что для хоть мало-мальски больших приложений с большим количеством серверной логики не стоит прибегать к кодогенерации. 
Приходится использовать, как писали выше, два уровня graphql-api: с одним общается клиент, с другим - бэкенд, для доступа к БД. 
Я работаю по такой схеме:
1) Создаю/меняю схему данных с помощью StarUML (редактор uml-схем).
2) Генерирую код на основе схемы. Генерируется полное GraphQL-API со всеми crud операциями, фильтрацией и пагинацией, по всем канонам Relay.
3) Дальше - самое веселое. Я пишу кастомные запросы и мутации для уровня клиента. И  здесь мне уже нечем генерировать код - всю пагинацию, сортировку, фильтрацию я должен делать сам. При написании resolvers для этих кастомных запросов использую сгенеренное graphql-api. И здесь вторая проблема - все, что сгенерено - не оптимизировано так как я бы это сделал вручную при исопльзовании mongodb driver или mongoose. Ведь множество операций я, зная логику приложения, мог бы писать асинхронно, мог бы отправлять пользователю ответ а сам доделывать нужные мне операции, просто имел бы больше власти. Не вижу профита в использовании graphql для доступа к БД по сравнениию например с использованием mongoose.
06:01:30 ПП
User 417692616
Сделал для себя вывод, что генерация удобно только там где клиент полностью отображает структуру данных в БД
01:35:28 ПП
User 56456060
User 417692616
Сделал для себя вывод, что генерация удобно только там где клиент полностью отображает структуру данных в БД
О! Мой клиент.

Посмотри https://github.com/graphql-compose/graphql-compose

Эта штука как раз для того чтобы генерить и редактировать схему как тебе нужно через набор своих функций помогаек.
github.com/graphql-compose/graphql-compose
Toolkit for generating complex GraphQL Schemas on Node.js - graphql-compose/graphql-compose
05:58:08 ПП
User 267858911
Кто-нибуь знает как лучше делать throw Error чтобы в ошибку передавать ещё и код ошибки (применительно именно к Graphql-yoga) ?
10:10:54 ДП
User 224769697
а с призмой reorder в массивах кто то реализовывал?
10:11:31 ДП
User 224769697
например на фронте реализовано перетаскивание карточек,и можно их пересортировать вручную, а на сервере пока не понятно как это сделать без кучи кода
10:11:32 ДП
User 267858911
что за reorder?
10:11:41 ДП
User 267858911
а ясно
10:11:42 ДП
User 224769697
менять порядок элементов в массивах
10:11:46 ДП
10:12:32 ДП
User 267858911
нужно менять порядковый номер в таблице, т.к. база вообще не хранит порядок записей, и то что они возвращаются в нужном тебе порядке - дело удачи :)
10:13:14 ДП
User 224769697
т.е. нужно дополнительное поле, и изменять его при пересортировке?
10:13:25 ДП
10:14:03 ДП
User 224769697
а если мы из конца массива переносим элемент вначало, то нужно по всем элементам пройтись и сделать +1 ?
10:15:54 ДП
User 267858911
ну, так сходу не скажу, нужно погуглить что-то вроде reorder postgresql, но решение сходу - делать ему индект на 1 меньше чем первый, например -1 даже, и при запросе делать orderBy по этому полю
10:16:20 ДП
User 267858911
но это наверное плохая практика
10:17:05 ДП
User 224769697
в монге нашел удобную штуку:
https://docs.mongodb.com/manual/reference/operator/update/position/
можно передать $position при пуше в массив, и он вставится в нужном месте в массиве, а не в конец, для призмы/постгреса боюсь так удобно не будет )
docs.mongodb.com/manual/reference/operator/update/position
10:17:23 ДП
User 224769697
оу, точно, я что то не подумал искать для постгреса reorder, искал для призмы, спасибо )
06:25:53 ДП
User 118564668
User 224769697
а если мы из конца массива переносим элемент вначало, то нужно по всем элементам пройтись и сделать +1 ?
По идее у тебя местами меняются только два элемента, то есть в любом случае ты делаешь свап для двух элементов в базе, а не проходишься по всем
07:30:50 ДП
User 224769697
неа, не меняются (
07:50:42 ДП
User 56456060
User 224769697
неа, не меняются (
Гибкость и скорость на старте с призмой, потом встают в такие проблемы.

Просто создавай подключение напрямую к постгресу и пиши кастомный ресолвер. Со временем половина кода будет работать напрямую с базой.

Собственно профит от быстрого старта с призмой ты уже получил. И твой продукт уже эволюционировал из обычного коробочного решения.
07:54:09 ДП
User 224769697
User 56456060
Гибкость и скорость на старте с призмой, потом встают в такие проблемы.

Просто создавай подключение напрямую к постгресу и пиши кастомный ресолвер. Со временем половина кода будет работать напрямую с базой.

Собственно профит от быстрого старта с призмой ты уже получил. И твой продукт уже эволюционировал из обычного коробочного решения.
увы, через призму это тоже норм решилось) хотя, мб, напрямую с бд было бы производительнее
08:04:28 ДП
User 56456060
Призма хороший инструмент. Но серебряных пуль у нас разработчиков не существует. Надо плясать от задач и доступного времени на их решение.
08:06:52 ДП
09:56:06 ДП
User 584555800
prisma/prisma 1.18.0 → 1.18.1 🎉
11:45:27 ДП
User 224769697
кто шарит в аполло, подскажите плиз
если у меня есть такая квери
query {
    exercises(orderBy: updatedAt_DESC) {
      id
      name
...
и вот такая:
query($id: ID!) {
    exercise(where: { id: $id }) {
      id
      name
как то можно сделать чтобы вторая брала свои данные из кеша?
я добавил fetchPolicy: "cache-only", но так кверя ничего не находит :С
11:49:33 ДП
User 118564668
User 224769697
кто шарит в аполло, подскажите плиз
если у меня есть такая квери
query {
    exercises(orderBy: updatedAt_DESC) {
      id
      name
...
и вот такая:
query($id: ID!) {
    exercise(where: { id: $id }) {
      id
      name
как то можно сделать чтобы вторая брала свои данные из кеша?
я добавил fetchPolicy: "cache-only", но так кверя ничего не находит :С
Посмотри в сторону @connect и fetchPolicy cach and network
11:50:50 ДП
User 118564668
Ещё можно ручками из кеша взять первый запрос и отфильтровать по id, и на основе этого скипать второй запрос
11:52:55 ДП
User 224769697
User 118564668
Ещё можно ручками из кеша взять первый запрос и отфильтровать по id, и на основе этого скипать второй запрос
спасибо, нашел в доке что нужно задать cacheRedirects для InMemoryCache
11:53:11 ДП
User 224769697
получилось так:
export const cache = new InMemoryCache({
  cacheRedirects: {
    Query: {
      exercise: (_, args, { getCacheKey }) =>
        getCacheKey({ __typename: 'Exercise', id: args.where.id }),
    },
  },
});
11:53:23 ДП
User 224769697
и теперь берется из кэша норм )
03:56:05 ПП
User 584555800
prisma/graphql-playground v1.7.0 → v1.8.0 🎉
12:26:06 ПП
User 584555800
prisma/graphql-yoga v1.16.2 → v1.16.4 🎉

Архив сообщений