Size: a a a

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

2019 February 07

e

egoarka in GraphQL — русскоговорящее сообщество
akaSybe
аргументы? или просто на уровне ощущений
гибко, в любой момент делаешь для себя любой бизнес-кейс и директива-декоратор готова за 1 минуту
источник

e

egoarka in GraphQL — русскоговорящее сообщество
Алексей Родионов
Мне нравится, что директивы декларативны. Даже непрограммист поймёт что там происходит, читая схему.
так это да, я про то, что объявлять их на уровне gql схемы - это такое себе
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Директивы можно готовые найти на npm. То есть для большинства распространенных кейсов есть переиспользуемые пакеты директив. Подключил и поехал.
источник

e

egoarka in GraphQL — русскоговорящее сообщество
на уровне orm-entity уже круче смотрится
источник

e

egoarka in GraphQL — русскоговорящее сообщество
Алексей Родионов
Директивы можно готовые найти на npm. То есть для большинства распространенных кейсов есть переиспользуемые пакеты директив. Подключил и поехал.
так же и для директив <=> декораторов
источник

e

egoarka in GraphQL — русскоговорящее сообщество
ну хз
источник

a

akaSybe in GraphQL — русскоговорящее сообщество
мне кажется это не тот уровень где должны подобные вещи происходить
источник

e

egoarka in GraphQL — русскоговорящее сообщество
почему
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Я ещё пока не вкурил тему с middleware до конца.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Видимо нужно сначала столкнуться с проблемой, чтобы её понять.
источник

a

akaSybe in GraphQL — русскоговорящее сообщество
допустим такой кейс: имеется тип Пользователь, у которого есть поле "кредитная карта", на клиенте номер кредитной карты должен отображаться в виде XXXX-****-****-XXXX"
источник

e

egoarka in GraphQL — русскоговорящее сообщество
akaSybe
допустим такой кейс: имеется тип Пользователь, у которого есть поле "кредитная карта", на клиенте номер кредитной карты должен отображаться в виде XXXX-****-****-XXXX"
ты просто скрываешь на уровне схемы и все с помощью директивы <=> декоратора <=> мидлвари
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Изначально у нас всё проверялось прямо в резолверах. И вся логика проверок была рамазана по всему коду. Потом мы открыли для себя директивы. И вынесли логику в директивы, разделив эти вещи.
источник

e

egoarka in GraphQL — русскоговорящее сообщество
Алексей Родионов
Изначально у нас всё проверялось прямо в резолверах. И вся логика проверок была рамазана по всему коду. Потом мы открыли для себя директивы. И вынесли логику в директивы, разделив эти вещи.
export const hasRole: (role: string) => MiddlewareFn<MyContext> = (role: string) => async ({ context }, next) => {
 if (!context.req.session!.userId) {
   throw new Error("not authenticated");
 }

 const user = await User.findOne(context.req.session!.userId);

 if (!user) {
   throw new Error('not authenticated')
 }

 if (user.role !== role) {
   throw new Error('not authorized');
 }

 return next();
};


и использование в резолвере

@UseMiddleware(hasRole("admin"))
 @Query(() => String)
 async hello() {
   return "Hello World!";
 }
источник

e

egoarka in GraphQL — русскоговорящее сообщество
по-моему читается круто
пример упрощенный
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Мидллвари я так понял – тоже переиспользуемые функции, которые дёргаются до или после выполнения резолвера?
источник

a

akaSybe in GraphQL — русскоговорящее сообщество
Алексей Родионов
Изначально у нас всё проверялось прямо в резолверах. И вся логика проверок была рамазана по всему коду. Потом мы открыли для себя директивы. И вынесли логику в директивы, разделив эти вещи.
++
источник

e

egoarka in GraphQL — русскоговорящее сообщество
да, выше пример
источник

e

egoarka in GraphQL — русскоговорящее сообщество
чек пример выше
источник

a

akaSybe in GraphQL — русскоговорящее сообщество
чем миддлеваре для поля отличается от директивы?
источник