【问题标题】:How to cascade GraphQL?如何级联 GraphQL?
【发布时间】:2017-02-21 15:58:53
【问题描述】:

我目前正在使用“客户端 GraphQL 服务器”将 RESTful 端点包装到 GraphQL 端点。

但是如果服务器端也是一个 GraphQL 端点呢?如何通过轻量级的方式在 GraphQL 服务器中排队另一个 GraphQL 服务器?

或者更一般地说,如果我有提供微服务的 GraphQL 服务器“A”和“B”,那么我使用 GraphQL 服务器“C”来集成“A”和“B”。我应该使用某种使用 apollo-client 的“服务器端客户端”来在“C”中排队“A”和“B”吗?

【问题讨论】:

  • 目前,我不知道有什么好的方法可以做到这一点,但在 GitHub 上有一些讨论:github.com/graphql/graphql-js/issues/490
  • 一个真实的用例:Neo4j 现在可以从 Neo4j-GraphQL 扩展导出 GraphQL API,如果有 PostgreSQL 导出另一个 GraphQL API,将它们组合成一个 GraphQL 源成为一个问题。

标签: graphql apollostack


【解决方案1】:

实际上,我认为解决与您的微服务交互的功能的工作。更多信息,你应该看看GraphQL and Microservice Architecture

【讨论】:

    【解决方案2】:

    我从未见过客户端 GraphQL 以这种方式使用,但我想它会像往常一样工作。您使用返回数据的解析器进行查询。在这种情况下,您将使用 GraphQL 请求而不是 REST api 请求,但原理是一样的。

    请记住,GraphQL 与任何其他 api 没有什么不同。您将 HTTP 请求(使用 GraphQL,所有请求都是 POST)发送到 URL 端点(使用 GraphQL,URL 始终相同)并随请求发送参数数据(使用 GraphQL,这是整个查询的去向)。

    我想您可以将客户端 GraphQL 查询中的变量转换为服务器 GraphQL 查询中的变量,并以这种方式构建您的查询。

    使用 cURL,您可以使用如下格式进行查询:

    $ curl -XPOST -H "Content-Type:application/graphql"  -d 'query RootQueryType { count }' http://localhost:3000/graphql
    

    响应如下所示:

    {
      "data": {
        "count": 0
      }
    }
    

    只需使用您在客户端上使用的请求库来访问 REST 客户端,但对其进行修改以匹配您尝试访问的 GraphQL 服务器的 API。

    【讨论】:

    • 我认为这样会忽略内省的力量。
    • 如何从 graphql 网关组装一个 graphql 查询?
    猜你喜欢
    • 2018-02-19
    • 2019-09-23
    • 2016-12-24
    • 2018-11-02
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多