我的小组计划将Apollo网关用于联盟。因此,我们需要稍微不同地产生模式。

我们可以使用您惊人的lib生成类似的东西吗?

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

最佳答案

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

您可以使用@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类没有该字段)。

关于java - 如何生成用于Java联合的graphql模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56881128/

10-15 10:23