我的小组计划使用 Apollo Gateway 进行联合。因此,我们需要稍微不同地生成我们的模式。
我们可以使用你惊人的库来制作这样的东西吗?
extend type User @key(fields: "id") {
id: ID! @external
reviews: [Review]
}
我的小组计划使用 Apollo Gateway 进行联合。因此,我们需要稍微不同地生成我们的模式。
我们可以使用你惊人的库来制作这样的东西吗?
extend type User @key(fields: "id") {
id: ID! @external
reviews: [Review]
}
您想向类型添加一些字段和指令吗?
您可以使用@GraphQLContext
将外部方法附加为字段。或者甚至提供ResolverBuilder
返回额外Resolver
s 的自定义(这些稍后会映射到字段)。要添加指令,您可以创建带有元注释的注释@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
该类没有该字段)。