GraphQL:如何处理在自己的类型定义中引用类型?
Posted
技术标签:
【中文标题】GraphQL:如何处理在自己的类型定义中引用类型?【英文标题】:GraphQL: How to handle referencing a type within its own type definition? 【发布时间】:2021-08-31 10:03:53 【问题描述】:假设我有以下内容:
type User
id: Int!
name: String
dob: String
friends: [User]
Query
user(id: Int!): User
在我看来,我刚刚创造了无限递归的潜力:
query GetUser($userId: Int!)
user(id: $userId)
friends
name
friends
name
friends
name
...etc
在我的 user
解析器中,我将如何防止这种情况发生?
【问题讨论】:
这不是无限递归,因为您的查询只加载三个嵌套级别,而不是无限数量。您能否澄清一下您具体关注的是什么? 通常计算/限制最大深度级别/复杂性成本 - 根本没有在类型系统中定义 - 实现相关细节 【参考方案1】:这可能是一个潜在问题,但您可以使用自定义验证来阻止此类请求,例如 https://github.com/stems/graphql-depth-limit
import depthLimit from 'graphql-depth-limit'
import express from 'express'
import graphqlHTTP from 'express-graphql'
import schema from './schema'
const app = express()
app.use('/graphql', graphqlHTTP((req, res) => (
schema,
validationRules: [ depthLimit(10) ]
)))
【讨论】:
以上是关于GraphQL:如何处理在自己的类型定义中引用类型?的主要内容,如果未能解决你的问题,请参考以下文章