如何在 GraphQL 解析器中使用 JSON API includes?
How can I use JSON API includes in a GraphQL resolver?
我很好奇如何最好地为 apollo-server 构建我的 GraphQL 解析器以利用 API 选择性解析外键的能力(类似于 JSON API 的 includes)。例如,您可以通过添加参数请求将评论包含在 post 中:
GET /articles/1?include=comments HTTP/1.1
但是,对记录的请求是在 articles
解析器级别进行的。它能以某种方式访问它下面的字段吗? comments
解析器能否以某种方式影响其父级?
我看到有 a blog post on graphql.org that references a pull request 旨在解决此问题...此后已被作者放弃。我还可以采取哪些其他方法?这基本上是当前规范的限制吗?是否还有其他可能有帮助的变化?
这是一个有趣的用例:)
您的查询以自上而下的方式解析,因此 articles
的解析器在 comments
的解析器之前被调用——您无法在 [=13= 中执行任何操作] 解析器可以影响 articles
解析器的作用。
但是,每个解析器都传递了四个参数——(1) 由其父字段解析的对象,(2) 其字段上的参数,(3) 上下文和 (4) GraphQLResolveInfo
目的。最后一个包含有关已提交到您的服务器的查询的信息。
例如,假设您有这样的查询:
query ArticlesQuery {
articles {
comments {
text
}
}
}
信息对象看起来像这样:
{
"fieldNodes": [
"name": {
"value": "articles"
},
selectionSet: [
"name": {
"value": "comments"
},
selectionSet: [
"name": {
"value": "text"
}
]
]
[
}
我省略了许多其他字段,但您可以看到对象是如何嵌套的,就像您的查询文档一样。这使得遍历它以检查实际请求了哪些字段成为可能。然后您可以适当地修改您的 API 调用。
还有其他工具,like this one,可以帮助您更轻松地解析对象。
我很好奇如何最好地为 apollo-server 构建我的 GraphQL 解析器以利用 API 选择性解析外键的能力(类似于 JSON API 的 includes)。例如,您可以通过添加参数请求将评论包含在 post 中:
GET /articles/1?include=comments HTTP/1.1
但是,对记录的请求是在 articles
解析器级别进行的。它能以某种方式访问它下面的字段吗? comments
解析器能否以某种方式影响其父级?
我看到有 a blog post on graphql.org that references a pull request 旨在解决此问题...此后已被作者放弃。我还可以采取哪些其他方法?这基本上是当前规范的限制吗?是否还有其他可能有帮助的变化?
这是一个有趣的用例:)
您的查询以自上而下的方式解析,因此 articles
的解析器在 comments
的解析器之前被调用——您无法在 [=13= 中执行任何操作] 解析器可以影响 articles
解析器的作用。
但是,每个解析器都传递了四个参数——(1) 由其父字段解析的对象,(2) 其字段上的参数,(3) 上下文和 (4) GraphQLResolveInfo
目的。最后一个包含有关已提交到您的服务器的查询的信息。
例如,假设您有这样的查询:
query ArticlesQuery {
articles {
comments {
text
}
}
}
信息对象看起来像这样:
{
"fieldNodes": [
"name": {
"value": "articles"
},
selectionSet: [
"name": {
"value": "comments"
},
selectionSet: [
"name": {
"value": "text"
}
]
]
[
}
我省略了许多其他字段,但您可以看到对象是如何嵌套的,就像您的查询文档一样。这使得遍历它以检查实际请求了哪些字段成为可能。然后您可以适当地修改您的 API 调用。
还有其他工具,like this one,可以帮助您更轻松地解析对象。