Size: a a a

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

2020 April 10

AK

Alexander Knyazev in GraphQL — русскоговорящее сообщество
Алексей Родионов
Если уже юзаешь Apollo Server, то:

const server = new ApolloServer({
 typeDefs,
 schemaDirectives: {
   upperCase: UpperCaseDirective
 }
});
вот да, так и делал, только в конструктор apollo-server передаю не typeDefs и resolvers отдельно, а просто schema, созданную c помощью createGraphQLSchema. Но не работает. Если через typedefs делать - то работает, но как писал выше -  у меня не SDL
источник

АР

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

import { attachDirectiveResolvers } from 'apollo-server';

const directiveResolvers = {
 // directive resolvers implement
};

attachDirectiveResolvers(
 schema,
 directiveResolvers,
);
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Только, если мне не изменяет память, directiveResolvers deprecated.
источник

AK

Alexander Knyazev in GraphQL — русскоговорящее сообщество
Да, попробую, спасибо
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Но я не советую связываться с директивами.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Очень много багов и ограничений.
источник

AK

Alexander Knyazev in GraphQL — русскоговорящее сообщество
Ну мне для конкретной задачи будет удобно (если сработает конечно). Если нет - буду контрибутить доп. функционал в graphql-js, issue я там  уже создал)
источник

АР

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

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Директивы прикольны при SDL-first. При code-first они не нужны.
источник

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
В том же type-graphql их заменяют декораторы:

@InputType()
export class RecipeInput {
 @Field()
 @MaxLength(30)
 title: string;

 @Field({ nullable: true })    
 @Length(30, 255)
 description?: string;

 @Field(type => [String])
 @MaxArraySize(25)
 ingredients: string[];
}


@ObjectType()
class MyObject {
 @Field()
 publicField: string;

 @Authorized()
 @Field()
 authorizedField: string;

 @Authorized("ADMIN")
 @Field()
 adminField: string;

 @Authorized(["ADMIN", "MODERATOR"])
 @Field({ nullable: true })
 hiddenField?: string;
}
источник

AK

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

АР

Алексей Родионов in GraphQL — русскоговорящее сообщество
Alexander Knyazev
Ну по сути да, то, что я хочу их использовать - вынужденная мера. Так graphql не позволяет напистаь функцию - ресолвер для типа, не для поля.
источник

AK

Alexander Knyazev in GraphQL — русскоговорящее сообщество
Тут опять же от поля пляшу в резолвере, не от типа.
источник

FM

Fedor Moroseev in GraphQL — русскоговорящее сообщество
Мне кстати проще, мне нужно обозначить редактируемо ли поле для роли и какие команды отвечают типу.
источник

FM

Fedor Moroseev in GraphQL — русскоговорящее сообщество
Есть в gql механизм?
источник

AK

Alexander Knyazev in GraphQL — русскоговорящее сообщество
Fedor Moroseev
Мне кстати проще, мне нужно обозначить редактируемо ли поле для роли и какие команды отвечают типу.
Ну вот здесь как раз я бы лично рекомендовал эту логику на уровень graphql не выносить, а создавать отдельные типы данных для этого
источник

AK

Alexander Knyazev in GraphQL — русскоговорящее сообщество
И возвращать их в ресолверах. Это уже по сути не API, это бизнес-логика
источник

FM

Fedor Moroseev in GraphQL — русскоговорящее сообщество
Alexander Knyazev
Ну вот здесь как раз я бы лично рекомендовал эту логику на уровень graphql не выносить, а создавать отдельные типы данных для этого
Для меня это апи
источник

FM

Fedor Moroseev in GraphQL — русскоговорящее сообщество
Мне нужно создавать автогенерируемую админку
источник