Как я могу создать схему graphql для федерации с Java?
Моя группа планирует использовать Apollo Gateway для федерации. Поэтому нам нужно создавать наши схемы немного по-другому.
Можем ли мы создать что-то подобное с использованием вашей удивительной библиотеки?
extend type User @key(fields: "id") {
id: ID! @external
reviews: [Review]
}
1 ответ
Вы хотите добавить некоторые поля и директивы для типа?
Вы можете использовать @GraphQLContext
прикреплять внешние методы как поля. Или даже предоставить обычай ResolverBuilder
который возвращает дополнительный Resolver
s (позже они сопоставляются с полями). Чтобы добавить директивы, вы можете создавать аннотации с мета-аннотацией @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
класс не имеет этого поля).