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

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

352 members

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

10:49:08 ДП
User 267858911
Всем привет, я тут создаю boilerplate сервера на технологиях graphql+docker+prisma, с пользователями  и простым набором сущностей, со всевозможными фичами, которые используются практически в каждом проекте (управление пользователями/регистрация по email/управление ролями, доступом к функциям/загрузка файлов и т.д.), думаю выложить его в opensource, может кому интересно поучавствовать? Ищу людей, которые смогут помочь сделать сферический проект в вакууме
10:52:28 ДП
11:06:20 ДП
User 352892335
User 267858911
Всем привет, я тут создаю boilerplate сервера на технологиях graphql+docker+prisma, с пользователями  и простым набором сущностей, со всевозможными фичами, которые используются практически в каждом проекте (управление пользователями/регистрация по email/управление ролями, доступом к функциям/загрузка файлов и т.д.), думаю выложить его в opensource, может кому интересно поучавствовать? Ищу людей, которые смогут помочь сделать сферический проект в вакууме
Так выкладывай, в чем проблема?))
11:07:15 ДП
User 267858911
хм. ни в чём, действительно
11:07:25 ДП
User 267858911
ну ща)
11:10:41 ДП
User 267858911
https://gitlab.com/uxname/uxbackend
gitlab.com/uxname/uxbackend
11:11:49 ДП
User 267858911
оплачиваю спасибами за любые замечания/предложения
11:12:40 ДП
User 352892335
User 267858911
оплачиваю спасибами за любые замечания/предложения
не плачь))
11:13:19 ДП
User 267858911
не понимаю о чём ты)
11:15:14 ДП
User 352892335
last_login_date - поля с подчеркиванием допустимы?
11:16:01 ДП
User 267858911
в смысле компилится/работает ли? -да. хорошо ли так делать? хз, но если что - переделаем, для этого и выкладываю проект
11:17:27 ДП
User 352892335
я просто когда с Kinvey на graphcool миграцию делал, заколебался, что поля с подчеркиванием запрещены синтаксисом
11:17:58 ДП
User 352892335
а почему apollo a не yoga?
11:18:35 ДП
User 267858911
начинал с apollo, знаю его, потом узнал про призму
11:18:56 ДП
User 267858911
а потом подумал раз yoga на apollo сделана, то какая разница, не смотрел ещё на yoga
11:20:52 ДП
User 352892335
У тебя для призмы и для apollo разные схемы?
11:21:33 ДП
User 267858911
да, аполло смотрит наружу (будет смотреть), призма - только между контейнерами докера доступна, во вне она не будет смотреть
11:22:03 ДП
User 267858911
просто набор сущностей копирую из из призмы в apollo, только query и mutation сам прописываю
11:22:30 ДП
User 352892335
а где схема для apollo? я вижу datamodel.prisma - это для призмы
11:23:19 ДП
User 267858911
schema_api.js
11:24:20 ДП
User 352892335
ты ее руками создаешь?
11:24:54 ДП
User 352892335
как снаружи будет доступ к призме - это самый больной вопрос обычно
11:25:01 ДП
User 267858911
Да, беру схему из призмы, вырезаю оттуда Mutation {} и Query {} и кидаю в аполло схему
11:25:21 ДП
User 267858911
User 352892335
как снаружи будет доступ к призме - это самый больной вопрос обычно
к призме не должно быть доступа снаружи, это ж прямой доступ к бд
11:25:39 ДП
User 352892335
Если в призму добавится еще 20 типов - то их придется тут руками прописывать?
11:25:45 ДП
11:25:56 ДП
User 352892335
не хорошо))
11:26:08 ДП
User 267858911
ну вернее как, можно просто опять же, скопировать все сущности кроме коренвых Mutation и Query
11:26:36 ДП
User 352892335
а ресолверы для них где?
11:26:48 ДП
User 267858911
папка resolver
11:26:59 ДП
User 267858911
а собираются в app.js
11:27:30 ДП
User 267858911
https://gitlab.com/uxname/uxbackend/blob/master/app.js#L6
gitlab.com/uxname/uxbackend/blob/master/app.js
11:31:53 ДП
User 352892335
Просто мы тут чуть выше обсуждали вопрос - как все CRUD операции из призмы предоставить наружу. На каждый тип из модели призма генерирует 5 операций (типа post, posts, createPost, updatePost, deletePost) + плюс туеву кучу типов (Input, Where и тп). Интересно было бы посмотреть кто как решает этот вопрос. Я для себя нашел способ через prisma-binding автоматически генерировать - по крайней мере не приходится в двух местах одно и тоже писать
11:32:31 ДП
User 352892335
Возможно это не везде, конечно нужно.
11:32:37 ДП
User 267858911
prisma-binding - что это? в кратце
11:33:16 ДП
User 267858911
ну или ссылку скинь плз
11:33:33 ДП
User 267858911
на желательно простое описание :)
11:33:37 ДП
User 352892335
по сути то же что и prisma-client - позволяет из сервера выполнять запросы к призме
11:33:38 ДП
User 352892335
https://github.com/prisma/prisma-binding
github.com/prisma/prisma-binding
GraphQL Binding for Prisma services (GraphQL Database) - prisma/prisma-binding
11:38:05 ДП
User 267858911
Так в итоге просто идет создание своего набора резолверов. которые просто вручную пробрасываются на призму, так?
типа
function productsResolver(args) {
    return prisma.products(args);
}
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 267858911
User 352892335
https://www.prisma.io/docs/tutorials/-ohdaiyoo6c#step-5:-instantiate-the-prisma-binding
спасибо
12:28:47 ПП
User 210944655
Uxname (1) увеличил репутацию UsulPro (1)
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
Сделал для себя вывод, что генерация удобно только там где клиент полностью отображает структуру данных в БД