当前位置: 首页 > 知识库问答 >
问题:

严格使用GraphQL作为查询语言

吕皓
2023-03-14

我认为我的问题是一个常见的问题,我正在权衡作为解决方案的GraphQL的成本和收益。

我在一个产品上工作,该产品的数据由基于CRUD的RESTAPI存储。我们的应用程序组件公开了一个数据搜索接口,当然需要某种服务器端支持来请求该数据。这可以包括排序、筛选、选择字段等。当然,在Hibernate上下文中提供这些功能的更传统方式,比如endpoint的查询参数附加项,但是在这一上下文中尝试CopyQL是很酷的,这为扩展其查询查询的使用奠定了基础。

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();
  }

我只是计划采取一个请求体到我的泽西服务器,看起来完全一样的请求,将被发送到GraphQL服务器。然后,我利用一些库支持来解释和执行对数据的请求。

如果不想太多可能出错的事情,看起来客户机可以像使用GraphQL服务器一样使用此API,只是我不需要管理单独的服务器来满足搜索需求。

在这样一个基于endpoint的上下文中使用GraphQL IDL是有价值的还是愚蠢的?

共有1个答案

阎宾实
2023-03-14

除了不需要在每个请求上重建模式或GraphQL实例(有些情况下,您可能想要重建GraphQL实例,但您的情况不是这样),这几乎是规范的方式
为GraphQL保留一个单独的服务器是相当不常见的,它通常会按照您描述的方式进行介绍——就像您通常的RESTendpoint旁边的另一个endpoint一样。所以你的用法是合法的-一点也不傻:)

顺便说一句,我不确定什么是QueryIDL。。。查询只是一个字符串。不需要特别的课程。

 类似资料:
  • 刚接触 GraphQL,我在通过 GraphiQL 发送查询时遇到问题。 这是我的方案. js 当我在 graphiql 上运行以下查询时: 我收到“语法错误 GraphQL 请求 (3:9) 预期名称,找到字符串”,但我希望获得 ID 为“23”的用户。 我错过了什么?

  • 我正在使用Apollo Angular并托管一个GraphQL驱动的服务器。我试图实现的请求很简单。我需要传递一个对象作为我请求的查询参数。这是我的请求: 查询定义为: 服务器上的我的架构定义为: 当我的解析器功能 我想知道是否允许输入作为查询中的参数,如果不允许,我应该使用什么样的模式或实践。 如果可能,我不希望我的在代码中显式地包含每个参数。 非常感谢。 编辑:已解决,解析程序函数中的行为,从

  • 我试图使用MongoDB对BSON的严格JSON表示编写一个日期比较查询。 我希望它能在MongoDB shell(v2.4.3)中工作 这是我试过的。。。 (如你所见,我尝试了ISO8601日期、大纪元时间,还将我的更改为,理论上它们是互斥的,所以其中一个应该返回一些东西:-) 谢谢你的指点! -B

  • 我是GraphQL新手。我知道这是个很基本的问题。但我花了很多时间却没能成功。 我的需求是我需要从java类使用graphql-java api方法发送GraphQL查询。 以下是查询:

  • 我正在使用GraphQL客户端americanExpress/节点。 这是我想要的查询: 服务器返回包含值和日期时间的对象列表。使用Postman,服务器成功返回一个列表。 我正在使用以下带注释的类: 并构建请求: 但是,结果是GetLatestDataAnNotationClass类型的单个对象,而不是所需的GetLatestDataAnNotationClass列表。我尝试使用嵌套类,但结果查

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga