如何使用GraphQL解析器中包含的JSON API?

如何使用GraphQL解析器中包含的JSON API?,graphql,graphql-js,json-api,apollo-server,Graphql,Graphql Js,Json Api,Apollo Server,我很好奇如何最好地构造apollo服务器的GraphQL解析器,以利用API选择性解析外键的能力(类似于JSON API)。例如,您可以通过添加参数来请求将评论包括在帖子中: GET /articles/1?include=comments HTTP/1.1 但是,对记录的请求是在文章解析器级别提出的。它能以某种方式访问它下面的字段吗?注释解析器是否会以某种方式影响其父级 我看到graphql.org上有一个引用了一个设计来解决这个问题的…它已经被作者抛弃了。我还可以采取哪些其他方法?这基本上

我很好奇如何最好地构造apollo服务器的GraphQL解析器,以利用API选择性解析外键的能力(类似于JSON API)。例如,您可以通过添加参数来请求将评论包括在帖子中:

GET /articles/1?include=comments HTTP/1.1
但是,对记录的请求是在
文章
解析器级别提出的。它能以某种方式访问它下面的字段吗?
注释
解析器是否会以某种方式影响其父级


我看到graphql.org上有一个引用了一个设计来解决这个问题的…它已经被作者抛弃了。我还可以采取哪些其他方法?这基本上是当前规范的限制吗?还有其他可能有所帮助的变化吗?

这是一个有趣的用例:)

您的查询是以自上而下的方式解析的,因此
文章
的解析程序在
注释
的解析程序之前被调用--您在
注释
解析程序内所做的任何事情都不会影响
文章
解析程序的功能

但是,每个解析器都会被传递四个参数——(1)由其父字段解析的对象,(2)其字段上的参数,(3)上下文和(4)一个
graphqlsolveinfo
对象。最后一个包含有关提交到服务器的查询的信息

例如,假设您有这样一个查询:

query ArticlesQuery {
  articles {
    comments {
      text
    }
  }
}
{
  "fieldNodes": [
    "name": {
      "value": "articles"
    },
    selectionSet: [
      "name": {
        "value": "comments"
      },
      selectionSet: [
        "name": {
          "value": "text"
        }
      ]
    ]
  [
}
info对象的外观如下所示:

query ArticlesQuery {
  articles {
    comments {
      text
    }
  }
}
{
  "fieldNodes": [
    "name": {
      "value": "articles"
    },
    selectionSet: [
      "name": {
        "value": "comments"
      },
      selectionSet: [
        "name": {
          "value": "text"
        }
      ]
    ]
  [
}
我省略了许多其他字段,但是您可以看到对象是如何嵌套的,就像您的查询文档一样。这样就可以通过迭代来检查实际请求了哪些字段。然后可以适当地修改API调用

还有一些工具可以帮助您更轻松地解析对象