查询参数在GraphQL中传播

时间:2019-09-11 07:12:00

标签: api graphql

我有以下架构:

input ResumeFilter {
  id: ID
  accountId: ID
  lang: Lang
}

extend type Query {
  resume(filter: ResumeFilter): Resume!
  resumes(filter: ResumeFilter, offset: Int, limit: Int): [Resume!]!
}

现在,我想从filter查询中删除resume关键字,因为除此之外它没有其他功能:

extend type Query {
  resume(id: ID, accountId: ID, lang: Lang): Resume! # !!! repeats ResumeFilter !!!
  resumes(filter: ResumeFilter, offset: Int, limit: Int): [Resume!]!
}

要解决违反DRY的问题,我正在尝试以下操作:

extend type Query {
  resume(...ResumeFilter): Resume!
  resumes(filter: ResumeFilter, offset: Int, limit: Int): [Resume!]!
}

这在语法上是不正确的。是否有语法/方式可以优雅地解决此问题?也许有碎片?

1 个答案:

答案 0 :(得分:0)

片段只能在客户端与可执行文档一起使用。没有用于传播输入对象的语法。如果您的服务器端语言支持字符串插值,则可以使用它。例如,在JavaScript中:

const resumeFilterFields = `
  id: ID
  accountId: ID
  lang: Lang
`

const schema = `
  input ResumeFilter {
    ${resumeFilterFields}
  }

  extend type Query {
    resume(${resumeFilterFields}): Resume!
    resumes(filter: ResumeFilter, offset: Int, limit: Int): [Resume!]!
  }
`