Моя группа планирует использовать Apollo Gateway для федерации. Поэтому нам нужно создавать наши схемы немного по-другому.
Можем ли мы создать что-то подобное, используя вашу замечательную библиотеку?
extend type User @key(fields: "id") {
id: ID! @external
reviews: [Review]
}




Вы хотите добавить несколько полей и директив к типу?
Вы можете использовать @GraphQLContext для присоединения внешних методов в виде полей. Или даже предоставьте пользовательский ResolverBuilder, который возвращает дополнительные Resolvers (позже они будут сопоставлены с полями).
Чтобы добавить директивы, вы можете создавать аннотации с мета-аннотациями с помощью @GraphQLDirective (см. тесты для примеров).
Наконец, вы, конечно, можете предоставить пользовательский TypeMapper для User и полностью контролировать то, как этот тип отображается.
Например. вы можете сделать аннотацию, например:
@GraphQLDirective(locations = OBJECT)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Key {
public String[] fields;
}
Если вы затем поместите эту аннотацию в тип:
@Key(fields = "id")
public class User {
@External //another custom annotation
public @GraphQLId @GraphQLNonNull String getId() {...}
}
он будет отображаться как:
type User @key(fields: "id") {
id: ID! @external
}
Я полагаю, вы знаете о @GraphQLContext, но вкратце:
//Some service class registered with GraphQLSchemaBuilder
@GraphQLApi
public class UserService {
@GraphQLQuery
public List<Review> getReviews(@GraphQLContext User user) {
return ...; //somehow get the review for this user
}
}
Из-за @GraphQLContext тип User теперь имеет поле review: [Review] (хотя в классе User этого поля нет).
Спасибо! Но, похоже, это не работает. См. на github.com/safaksahin/graphqldemo