我怎样才能为与 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 没有那个字段)。
我的团队计划使用 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 没有那个字段)。