graphql java: 全局 dataFetcher 和动态对象
graphql java: global dataFetcher and dynamic object
我正在尝试像 REST 客户端一样使用 GraphQL API。我的后端 return JSON 但在我的应用程序客户端中,我编写了 graphQL,在客户端中,我将 graphQL 查询转换为 HTTP 调用。
我的架构:
type Query {
students: [Student]
}
type Student {
name: String
}
POJO 示例:
public class Student {
private Integer id;
private String name;
}
我的解析器:
public class Query implements GraphQLQueryResolver {
public List<Post> students() {
// HTTP Request
}
}
在所有库的实现中,我需要为 Student 创建一个 POJO,并在我的 API.
中为请求编写一个解析器
是否存在不需要创建 POJO 和创建全局执行解析器的方法?
如果您正在使用像 graphql-java-tools 这样的库(似乎是这种情况),您需要 POJO,因为这是库从中获取其类型映射的地方。但是如果你只是使用 graphql-java 本身,你可以按照你喜欢的方式连接它 - 包括有一个单一的全局解析器(即 DataFetcher
)。
有关如何执行此操作的想法,请参阅 http://graphql-java.readthedocs.io/en/latest/schema.html#idl
你想要这样的东西:
SchemaParser schemaParser = new SchemaParser();
SchemaGenerator schemaGenerator = new SchemaGenerator();
File schemaFile = loadSchema("yourStudentSchema.graphqls");
TypeDefinitionRegistry typeRegistry = schemaParser.parse(schemaFile);
RuntimeWiring wiring = buildRuntimeWiring();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, wiring);
RuntimeWiring 是挂接解析器的地方,例如:
RuntimeWiring buildRuntimeWiring() {
return RuntimeWiring.newRuntimeWiring()
// this uses builder function lambda syntax
.type("Query", typeWiring -> typeWiring
.dataFetcher("students", env -> fetchDataSomeHow(env)))
.build();
}
因此,您可以为每个 dataFetcher
调用 f 提供相同的 DataFetcher
实现,这就是您所追求的。 graphql-java 本身对它的连接和实现方式没有任何假设,例如它不强制执行 POJO 或其他任何东西。
我正在尝试像 REST 客户端一样使用 GraphQL API。我的后端 return JSON 但在我的应用程序客户端中,我编写了 graphQL,在客户端中,我将 graphQL 查询转换为 HTTP 调用。
我的架构:
type Query {
students: [Student]
}
type Student {
name: String
}
POJO 示例:
public class Student {
private Integer id;
private String name;
}
我的解析器:
public class Query implements GraphQLQueryResolver {
public List<Post> students() {
// HTTP Request
}
}
在所有库的实现中,我需要为 Student 创建一个 POJO,并在我的 API.
中为请求编写一个解析器是否存在不需要创建 POJO 和创建全局执行解析器的方法?
如果您正在使用像 graphql-java-tools 这样的库(似乎是这种情况),您需要 POJO,因为这是库从中获取其类型映射的地方。但是如果你只是使用 graphql-java 本身,你可以按照你喜欢的方式连接它 - 包括有一个单一的全局解析器(即 DataFetcher
)。
有关如何执行此操作的想法,请参阅 http://graphql-java.readthedocs.io/en/latest/schema.html#idl
你想要这样的东西:
SchemaParser schemaParser = new SchemaParser();
SchemaGenerator schemaGenerator = new SchemaGenerator();
File schemaFile = loadSchema("yourStudentSchema.graphqls");
TypeDefinitionRegistry typeRegistry = schemaParser.parse(schemaFile);
RuntimeWiring wiring = buildRuntimeWiring();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, wiring);
RuntimeWiring 是挂接解析器的地方,例如:
RuntimeWiring buildRuntimeWiring() {
return RuntimeWiring.newRuntimeWiring()
// this uses builder function lambda syntax
.type("Query", typeWiring -> typeWiring
.dataFetcher("students", env -> fetchDataSomeHow(env)))
.build();
}
因此,您可以为每个 dataFetcher
调用 f 提供相同的 DataFetcher
实现,这就是您所追求的。 graphql-java 本身对它的连接和实现方式没有任何假设,例如它不强制执行 POJO 或其他任何东西。