我的小组计划将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/