Как я могу создать схему graphql для федерации с Java?

Моя группа планирует использовать Apollo Gateway для федерации. Поэтому нам нужно создавать наши схемы немного по-другому.

Можем ли мы создать что-то подобное с использованием вашей удивительной библиотеки?

extend type User @key(fields: "id") {
  id: ID! @external
  reviews: [Review]
}

1 ответ

Решение

Вы хотите добавить некоторые поля и директивы для типа?

Вы можете использовать @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 класс не имеет этого поля).

Другие вопросы по тегам