我认为我的问题很常见,我正在权衡 GraphQL 作为解决方案的成本和收益。
我正在开发一个产品,其数据由基于 CRUD 的单一 REST API 存储。我们的应用程序组件公开了一个数据搜索接口,当然需要某种服务器端支持来请求该数据。这可能包括排序、过滤、选择字段等。当然,还有更传统的方法可以在 REST 上下文中提供这些功能,例如端点的查询参数附加组件,但在此尝试 GraphQL 会很酷context 为扩展其用于查询的用途奠定了基础。
GraphQL 公开了一种非常好的查询语言来搜索数据,并最终允许我专门针对我的领域定制搜索语言。但是,我不确定是否有一种很好的方法来利用 IDL 而无需完全管理单独的服务器。
以以下 Java Jersey API 概念验证示例为例:
@GET
@Path("/api/v1/search")
public Response search(QueryIDL query) throws IOException {
final SchemaParser schemaParser = new SchemaParser();
TypeDefinitionRegistry typeDefinitionRegistry = // load schema
RuntimeWiring runtimeWiring = // wire up data-fetching classes
SchemaGenerator schemaGenerator = new SchemaGenerator();
GraphQLSchema graphQLSchema =
schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
ExecutionResult executionResult = build.execute(query.toString());
return Response.ok(executionResult.getData()).build();
}
我只是打算将一个请求正文放入我的 Jersey 服务器,它看起来与发送到 GraphQL 服务器的请求完全一样。然后,我利用一些库支持来解释和执行数据请求。
没有真正考虑太多可能出错的事情,看起来客户端可以使用这个 API,就像他们使用 GraphQL 服务器的方式一样,除了我不需要管理单独的服务器只是为了方便我的搜索需求。
在这样的基于端点的上下文中使用 GraphQL IDL 看起来有价值还是愚蠢?