Size: a a a

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

2019 February 13

SZ

Sergey Zverev in GraphQL — русскоговорящее сообщество
кто где хранит локальный стейт в apoolo-client? Мне история с кэшем вообще чота не нравится( Склоняюсь к реактовскому контексту
источник

g

graphql_bot in GraphQL — русскоговорящее сообщество
prisma/prisma 1.26.4 → 1.26.5 🎉
источник

d

donnyyy in GraphQL — русскоговорящее сообщество
Alexander
есть тут пользователи graphene-python?

как запретить предоставление доков по схеме при подключении к ней через  клиенты, а то на любой мой прод зайти - там прямо инструкция что и куда кидать?
Насколько я понял по ишью в их репо, такой фичи у них нет

Можно сделать middleware, которое, например, закроет схему:

class TopSecretMiddleware(object):
   def resolve(self, next, root, info, **kwargs):
       if info.field_name == '__schema':
           return None
       return next(root, info, **args)
источник

A

Alexander in GraphQL — русскоговорящее сообщество
donnyyy
Насколько я понял по ишью в их репо, такой фичи у них нет

Можно сделать middleware, которое, например, закроет схему:

class TopSecretMiddleware(object):
   def resolve(self, next, root, info, **kwargs):
       if info.field_name == '__schema':
           return None
       return next(root, info, **args)
спасибо. я уже привык по поводу сколько-нибудь кастомного поведения с графеном делать самопальные штуки)
источник

d

donnyyy in GraphQL — русскоговорящее сообщество
Да, библиотека очень интересная)
источник

A

Alexander in GraphQL — русскоговорящее сообщество
а документация какая...
источник

d

donnyyy in GraphQL — русскоговорящее сообщество
И баги фиксят оперативно!
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Заинтересовал вопрос, что выбрать custom scalars vs. custom schema directives (или middleware) для валидации полей?

Например, нужно чтобы значение поля было в формате email:

scalar EmailAddress

type User {
 mail: EmailAddress
}

vs

type User {
 mail: String @constraint(format: email)
}

vs

middleware c проверкой на формат.

Есть пакет https://github.com/okgrow/graphql-scalars с готовыми скалярными типами.

Есть 2 пакета https://github.com/confuser/graphql-constraint-directive и https://github.com/vsimko/node-graphql-constraint-lambda с директивой @constraint.

Интересует ограничения и потенциальная гибкость (плюсы и минусы) каждого подхода.

На первый взгляд кажется, что директива гибче, так как директиву можно потенциально применить только к инпуту конкретной мутации, а в другой мутации не применять к этому полю. Если же в самом типе это поле имеет кастомный тип, то во всех мутациях будет это ограничение.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Вопрос номер 2:

В проекте нужно реализовать пользователям ролевую систему. Обычно везде делают так:

enum Role {
 USER
 MODERATOR
 ADMIN
}

type User {
 roles: [Role]
}


Но если потом вдруг понадобится расширить список ролей потребуется вносить изменения в SDL (в этот enum).

Вариант с type вместо enum кажется гибче:

type Role {
 id: ID!
 name: String
}

type User {
 roles: [Role]
}


Ну и сделать мутации createRole, updateRole, deleteRole, которые могут дёргать только юзеры с ролью администратора.

Чем вариант с enum может быть выигрышнее? Упускаю ли я что-то?
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Алексей Родионов
Вопрос номер 2:

В проекте нужно реализовать пользователям ролевую систему. Обычно везде делают так:

enum Role {
 USER
 MODERATOR
 ADMIN
}

type User {
 roles: [Role]
}


Но если потом вдруг понадобится расширить список ролей потребуется вносить изменения в SDL (в этот enum).

Вариант с type вместо enum кажется гибче:

type Role {
 id: ID!
 name: String
}

type User {
 roles: [Role]
}


Ну и сделать мутации createRole, updateRole, deleteRole, которые могут дёргать только юзеры с ролью администратора.

Чем вариант с enum может быть выигрышнее? Упускаю ли я что-то?
Мне кажется без разницы, кому как удобнее, кто-то не против динамического изменения ролей, кто-то не любит ничего запоминать (как я) и ему лучше что б все роли были указаны в enum
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Uxname
Мне кажется без разницы, кому как удобнее, кто-то не против динамического изменения ролей, кто-то не любит ничего запоминать (как я) и ему лучше что б все роли были указаны в enum
То есть автокомплит при наборе запроса?
источник

U

Uxname in GraphQL — русскоговорящее сообщество
ну, и автокомлит тоже, но я про код имел ввиду, что бы когда пишешь была уверенность какие роли есть, как они пишутся. Ну и фронту не придется ничего рассказывать, он всё из схемы увидит
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Uxname
ну, и автокомлит тоже, но я про код имел ввиду, что бы когда пишешь была уверенность какие роли есть, как они пишутся. Ну и фронту не придется ничего рассказывать, он всё из схемы увидит
Но в тоже время для фронта можно документацию написать в случае с динамическими ролями
источник

U

Uxname in GraphQL — русскоговорящее сообщество
так что дело вкуса мне кажется
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Uxname
ну, и автокомлит тоже, но я про код имел ввиду, что бы когда пишешь была уверенность какие роли есть, как они пишутся. Ну и фронту не придется ничего рассказывать, он всё из схемы увидит
Так ведь можно через query достать их на фронте:

query {
 roles {
   id
   name
 }
}
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Uxname
так что дело вкуса мне кажется
ну можно и отдельным запросом :)
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
А по поводу первого вопроса что скажешь?
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
источник

P@

Pavel @nodkz in GraphQL — русскоговорящее сообщество
сравниваю подходы в построении схем
источник

U

Uxname in GraphQL — русскоговорящее сообщество
Алексей Родионов
А по поводу первого вопроса что скажешь?
тут я хз честно говоря
источник