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!]!
}
这在语法上是不正确的。有没有一种语法/方法可以优雅地解决这种情况?也许与片段?
解决方案
片段只能在客户端与可执行文档一起使用。没有用于传播输入对象的语法。如果您的服务器端语言支持字符串插值,则可以使用它。例如,在 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!]!
}
`
推荐阅读
- python - 从列和数据框迭代条件到列表转换(熊猫)
- java - 在 LinkedHashSet 中查找唯一值的索引
- visual-studio-2010 - 通过命令在 Visual Studio 中以特定行号打开 .c 文件
- shell - linux shell脚本中的“错误替换”
- javascript - IF ELSE 语句不适用于图像和性别的循环
- swiftui - “调用中的额外参数” Spacer()
- php - AWS Beanstalk 和 docker-compose、php-fpm、忽略数据库、正确部署?
- angular - 重新初始化组件后,Angular Subscription 未定义
- javascript - 尝试使用 react-i18next 翻译带有变量的 img 标题
- javascript - 抓取网站链接后删除不必要的字符串。- Discord.JS