我怎样才能为与 java 的联合生成一个 graphql 模式?

How can I produce a graphql schema for federation with java?

我的团队计划使用 Apollo Gateway 进行联合。因此,我们需要以不同的方式生成我们的模式。

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

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

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

您可以使用 @GraphQLContext 将外部方法附加为字段。或者甚至提供自定义 ResolverBuilder,returns 额外的 Resolver(这些稍后会映射到字段)。 要添加指令,您可以使用 @GraphQLDirective 创建注释 meta-annotated (请参阅测试示例)。 最后,您当然可以为 User 提供自定义 TypeMapper 并完全控制该类型的映射方式。

例如你可以做这样的注释:

@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 class 没有那个字段)。