我有一组通用过滤器,它们是我的graphQL api的不同类型范围内的参数。
我希望能够一次声明参数及其类型,然后重用此逻辑,而不是将其添加到每个查询中。
只是想知道实现此目标的最佳方法是什么? graphql规范是否适合此用例,或者我是否可以将参数集声明为字符串并将其添加到查询中?像这样:
let filterArgs = "timeStart: $startTime, timeEnd:$endTime, someFilter: $someFilter"
let filterTypes = "$startTime, DateTime!, $endTime: DateTime, $someFilter: String!"
const SOME_QUERY = gql`
query someQuery(${filterTypes}, $specificType: Int!) {
someFilterableType(${filterArgs}) {
someField
}
anotherFilterableType(${filterArgs}, additionalArg: $specificType)
}
`;
欢呼
答案 0 :(得分:1)
您可以做很多其他工作。这实际上是架构设计的一个问题。将字段上的多个参数转换为单个输入对象类型通常很有意义。当那些相同的参数在模式中的多个字段之间重复时,这更有意义。比较
type Query {
foo(baz: String, qux: String, quuz: String, corge: String, grault: String, garply: String, waldo: String, fred: String, plugh: String, xyzzy: String): Int!
bar(baz: String, qux: String, quuz: String, corge: String, grault: String, garply: String, waldo: String, fred: String, plugh: String, xyzzy: String): Int!
}
使用
type Query {
foo(input: FilterInput): Int!
bar(input: FilterInput): Int!
}
input FilterInput {
baz: String
qux: String
quuz: String
corge: String
grault: String
garply: String
waldo: String
fred: String
plugh: String
xyzzy: String
}
将所有这些通用参数简化为单个类型,不仅可以减少架构中的重复,而且可以简化客户端的查询:
query SomeQuery($input: FilterInput) {
foo(input: $input)
}