【问题标题】:GraphQL: How to handle referencing a type within its own type definition?GraphQL:如何处理在自己的类型定义中引用类型?
【发布时间】: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 解析器中,我将如何防止这种情况发生?

【问题讨论】:

  • 这不是无限递归,因为您的查询只加载三个嵌套级别,而不是无限数量。您能否澄清一下您具体关注的是什么?
  • 通常计算/限制最大深度级别/复杂性成本 - 根本没有在类型系统中定义 - 实现相关细节

标签: graphql apollo apollo-client apollo-server graphql-js


【解决方案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) ]
})))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2018-03-12
    • 1970-01-01
    • 2017-08-08
    • 2016-10-21
    • 2017-09-18
    • 2021-11-20
    • 2020-04-20
    相关资源
    最近更新 更多