1

我正在尝试使用 GraphQL 之类的 REST API 客户端。我的后端返回 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 和创建全局执行解析器的方法?

4

1 回答 1

0

如果您使用的是 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();
}

因此,您可以为每个调用 f 提供相同的DataFetcher实现,dataFetcher这就是您所追求的。graphql-java 本身对它的连接和实现方式不做任何假设,例如它不强制 POJO 或其他任何东西。

于 2017-09-09T02:51:44.987 回答