Как я могу создать схему graphql для федерации с Java? - PullRequest
1 голос
/ 04 июля 2019

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

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

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

1 Ответ

0 голосов
/ 04 июля 2019

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

Вы можете использовать @GraphQLContext для подключения внешних методов в качестве полей. Или даже укажите пользовательский ResolverBuilder, который возвращает дополнительные Resolver с (позже они сопоставляются с полями). Чтобы добавить директивы, вы можете создать аннотации с мета-аннотацией @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 не имеет этого поля).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...