1

我的小组计划使用 Apollo Gateway 进行联合。因此,我们需要稍微不同地生成我们的模式。

我们可以使用你惊人的库来制作这样的东西吗?

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

1 回答 1

2

您想向类型添加一些字段和指令吗?

您可以使用@GraphQLContext将外部方法附加为字段。或者甚至提供ResolverBuilder返回额外Resolvers 的自定义(这些稍后会映射到字段)。要添加指令,您可以创建带有元注释的注释@GraphQLDirective(参见测试示例)。最后,您当然可以提供自定义TypeMapperUser完全控制该类型的映射方式。

例如,您可以进行如下注释:

@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该类没有该字段)。

于 2019-07-04T09:43:04.183 回答