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

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

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

extend type User @key(fields: "id") {
  id: ID! @external
  reviews: [Review]
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 этого поля нет).

Спасибо! Но, похоже, это не работает. См. на github.com/safaksahin/graphqldemo

Sotona 29.10.2019 14:48

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