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

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

352 members

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

08:54:08 ДП
User 299096137
User 99248986
если постгрес, то есть https://github.com/graphile/postgraphile
github.com/graphile/postgraphile
Execute one command (or mount one Node.js middleware) and get an instant high-performance GraphQL API for your PostgreSQL database! - graphile/postgraphile
посмотрел
08:58:31 ДП
User 299096137
выглядит круто, но я не постгресс мастер, а лошара и писать на sql не хочется. Хотя я вижу выход в том, чтоб юзать orm, которая генерирует в постгрессе таблицы, потом из этих таблиц получать grpahql на apollo
09:00:40 ДП
User 299096137
хотя чем больше читаю, тем меньше понимаю как приготовить
09:11:16 ДП
User 99248986
по идее от тебя требуется только схемы таблиц определить
09:16:30 ДП
User 299096137
но я не хочу сделать схему засунуть внутрь этой схемы авторизацию и работать через схему
09:17:12 ДП
User 299096137
я хотел бы автогенерацию из чего нить в graphql и потом самому контролировать, что отдавать сгенерированный круд или свой резолвер
09:17:21 ДП
User 299096137
и самому контролировать авторизацию и права
09:17:34 ДП
User 299096137
вроде бы моя идея простейшая, но почему-то везде какой-то оверхед
09:17:44 ДП
User 299096137
не нашел в графиле примеров с express
09:17:56 ДП
User 299096137
да и тратить время на postgress sql не хочется
09:18:15 ДП
User 299096137
лан, буду дергаться с призмой
09:29:34 ДП
User 99248986
User 299096137
вроде бы моя идея простейшая, но почему-то везде какой-то оверхед
еще раз, это либа которая помогает тебе писать меньше бойлерплейтного круда, если нужен полный фарш, то это призма (и тогда нужно трахаться с ее ограничениями, багами и несовестимостями как в любом огромном сыром фреймворке) или апсинк. если нужен контроль над всем и понимание, то это свой сервер
09:30:51 ДП
User 99248986
и для авторизации тоже тыщи либ, она делается гениально красиво и просто в gql по сравнению с рестом
09:38:31 ДП
User 352892335
User 299096137
я хотел бы автогенерацию из чего нить в graphql и потом самому контролировать, что отдавать сгенерированный круд или свой резолвер
в примере, который я вчера скинул, ты можешь переопределить любой сгенерированный ресолвер своим
09:40:38 ДП
User 352892335
User 99248986
и для авторизации тоже тыщи либ, она делается гениально красиво и просто в gql по сравнению с рестом
А для призмы конкретно, что-то есть? я пока только graphql-shield нашел. Но не пойму, подходит он мне или нет
09:41:53 ДП
User 99248986
User 352892335
А для призмы конкретно, что-то есть? я пока только graphql-shield нашел. Но не пойму, подходит он мне или нет
ну вот видишь че происходит, вместо дженерик либ для авторизации в графкуель вы ищите либы специально написанные (совместимые с вашей версией) для призмы
09:44:48 ДП
User 99248986
это не то как софт должен строиться. или надежные опенс сорс кирпичи, каждый из которых делает свою работу или хорошая ентерпрайз коробка, которую взял, немного заплатил и юзаешь без головняка
09:46:25 ДП
User 352892335
User 99248986
ну вот видишь че происходит, вместо дженерик либ для авторизации в графкуель вы ищите либы специально написанные (совместимые с вашей версией) для призмы
По большому счету мне не для призмы нужно, а для graphql-yoga. А она вроде как на apollo основана. Тогда я перефразирую: можешь, что-то порекомендовать для ограничения доступа на основе роли пользователя, чтобы можно было использовать вместе с graphql-yoga?
09:46:49 ДП
User 99248986
не, йога от призмы
09:47:10 ДП
User 99248986
у аполло аполло сервер
09:48:30 ДП
User 99248986
https://github.com/Volst/graphql-authentication/tree/master/packages/graphql-authentication-prisma
github.com/Volst/graphql-authentication/tree/master/packages/graphql-authentication-prisma
🔑 Makes it easy to do boring authentication stuff with GraphQL (login, password reset, ...) - Volst/graphql-authentication
09:48:32 ДП
09:49:31 ДП
User 352892335
смотрю
09:49:34 ДП
User 99248986
в апсинке это сделано просто божественно https://docs.aws.amazon.com/appsync/latest/devguide/security.html
docs.aws.amazon.com/appsync/latest/devguide/security.html
Advanced concepts for AWS AppSync.
09:51:11 ДП
User 299096137
но твой апсинк кстать тоже на всем завязан
09:51:19 ДП
User 299096137
его без aws не поднять
09:52:14 ДП
User 352892335
User 99248986
https://github.com/Volst/graphql-authentication/tree/master/packages/graphql-authentication-prisma
github.com/Volst/graphql-authentication/tree/master/packages/graphql-authentication-prisma
🔑 Makes it easy to do boring authentication stuff with GraphQL (login, password reset, ...) - Volst/graphql-authentication
это все супер, но мне не это нужно. мне нужно разграничение доступа. чтобы пользователь только свои данные мог запрашивать и изменять
09:53:55 ДП
User 352892335
User 99248986
не, йога от призмы
https://github.com/prisma/graphql-yoga#how-does-graphql-yoga-compare-to-apollo-server-and-other-tools
но использует apollo
github.com/prisma/graphql-yoga
🧘 Fully-featured GraphQL Server with focus on easy setup, performance & great developer experience - prisma/graphql-yoga
10:06:06 ДП
User 99248986
User 299096137
его без aws не поднять
да, и aws дает тебе все инфру, включая управление пользователями, юзер пулы, менеджмент серваков и стримов + клиентский набор компонентов от amplify под любой фреймворк для авторизации, запросов и подписок. Вы там еще будете любовью заниматься с инстансом призмы (которая кстати единая точка отказы всего апа)
10:06:31 ДП
User 99248986
User 299096137
но твой апсинк кстать тоже на всем завязан
я про это написал выше, это нормальная ентерпрайз коробка
10:22:08 ДП
User 99248986
User 352892335
это все супер, но мне не это нужно. мне нужно разграничение доступа. чтобы пользователь только свои данные мог запрашивать и изменять
тут просто помимо самого ограничения доступа все завязано на саму систему авторизации и как она работает. В любом случае в резолвере у тебя есть хедеры запросы, тип и список полей
10:22:08 ДП
User 299096137
мне короче prisma тоже ппц не нравится, но я не вижу как готовить postgress либу эту
11:05:57 ДП
User 299096137
@UsulPro я не очень понял прикола, я что не могу прикинуть типы, но вообще не указывать resolvers?
11:07:33 ДП
User 352892335
User 99248986
тут просто помимо самого ограничения доступа все завязано на саму систему авторизации и как она работает. В любом случае в резолвере у тебя есть хедеры запросы, тип и список полей
Я вот ума не приложу как мне проверять доступ к вложенным запросам. Т.е. корневой запрос - тут все понятно. Но если там дальше куча всего запрашивается и у каждого типа может быть свое разрешение? Такое вообще реально сделать?
11:12:02 ДП
User 352892335
User 299096137
@UsulPro я не очень понял прикола, я что не могу прикинуть типы, но вообще не указывать resolvers?
я генерирую схему через prisma-client. положим она лежит в папке src/generated 
в схеме приложения пишу:
# import Query.*, * from './generated/prisma.graphql'
11:12:57 ДП
User 299096137
я хотел написать, что я прокидываю типы, но если не прокину объект с резолверами, то йога у меня вообще не поднимется
11:14:45 ДП
User 352892335
вот резолверы
11:17:10 ДП
User 299096137
че за prisma-binding и почему в самом призма клиенте нет query не понимаю
11:32:29 ДП
User 352892335
призма клиент тут только для генерации схемы из призмы. тоже самое можно и через призма биндинг, наверное. просто у меня оба добавлены.
11:33:26 ДП
User 352892335
prisma-binding - это вообще библиотека позволяющая напрямую запросы в prisma писать, на основе сгенерированной схемы.
11:34:05 ДП
User 299096137
User 352892335
призма клиент тут только для генерации схемы из призмы. тоже самое можно и через призма биндинг, наверное. просто у меня оба добавлены.
так у призмы клиента есть орм методы
11:43:13 ДП
User 299096137
@UsulPro Type "Node" is missing a "resolveType" resolver. знаешь че за хрень?
11:48:34 ДП
User 352892335
Обычно, что-то такое пишется есть у тебя в схеме есть тип, а соответсвующий ресолвер не задан
11:54:41 ДП
User 299096137
да, этот тип автоматом сгенерирован
11:54:59 ДП
User 299096137
и какого хрена мне нужно его резолвить
11:58:39 ДП
User 352892335
посмотрел у себя - у меня такой тип не генерится. а ты как генеришь? у меня так прописано:
hooks:
  post-deploy:
    - prisma generate
12:31:47 ПП
User 99248986
User 352892335
Я вот ума не приложу как мне проверять доступ к вложенным запросам. Т.е. корневой запрос - тут все понятно. Но если там дальше куча всего запрашивается и у каждого типа может быть свое разрешение? Такое вообще реально сделать?
Посмотри ссылку как апсинк это сделали, по идее все что тебе нужно это тип/поле, а эта инфа у тебя есть в каждом резолвере
04:09:01 ПП
User 299096137
я нашел для себя решение вместо призма и всякого
04:09:07 ПП
User 299096137
TypeGraphQL
04:09:24 ПП
User 299096137
это слой который из декораторов строит graphql схемы
04:10:24 ПП
User 299096137
главная фишка в том, что ты спокойно переиспользуешь схемы сущностей
04:10:39 ПП
User 99248986
мило, похоже на https://github.com/lukeautry/tsoa для реста
github.com/lukeautry/tsoa
Build swagger-compliant REST APIs using TypeScript and Node - lukeautry/tsoa
04:11:11 ПП
User 299096137
и решить проблему с crud через него проще, создать базовый класс и из него экстендится
04:11:24 ПП
User 99248986
но оно же не сгенерит круд и не переиспользует схему базу, то есть все равно 2 источника правды для данных
04:11:42 ПП
User 99248986
ты жаловался на бойлерплейт
04:12:12 ПП
User 299096137
схема базы строится из TypeORM, а проблему круда можно решить через класс базового резолвера
04:12:44 ПП
User 299096137
у меня источник правды остается один. Орм определяет мою схему
04:12:52 ПП
04:13:09 ПП
04:13:23 ПП
04:13:26 ПП
User 299096137
вот накидал
04:13:43 ПП
User 299096137
а вот часть сущности
04:13:45 ПП
04:13:47 ПП
User 99248986
декораторы это вообще охуенно, только когда их наконец утвердят как стандарт уже
04:13:58 ПП
User 299096137
в общем это решение которым я реально доволен
04:14:25 ПП
User 299096137
к сожалению в стандарт попадут уже другие декораторы, а декораторв в тс уже устарели
04:14:29 ПП
User 99248986
да, выглядит как полноценный фреймворк
04:15:08 ПП
User 299096137
причем поднимать можно на любой сервере который поддерживает graphql схемы
06:50:37 ПП
User 99248986
👆 это бот