Xia*_* Ye 2 graphql graphql-java
我是 GraphQL 的新手。有一个要求是从 CUSTOMERS 表中查询所有符合条件的数据,满足条件:GENDER == 'MALE' or 'AGE' >= 20。GQL 应该是什么样的?
之前有人提出过类似的东西,但被拒绝了。这意味着 GraphQL 本身不支持它,你必须自己推出它。
根据我所见,有几种方法可以做到:
(1) 定义您自己的查询语言,例如stackoverflow或Shopify所做的:
type Query{
customers (query:String) : [Customer]
}
Run Code Online (Sandbox Code Playgroud)
查询变为:
{
customers (query : "GENDER == 'MALE' or 'AGE' >= 20"){
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
(2) 定义您自己的输入对象模型,可以涵盖所有所需的搜索需求。Prisma尝试在OpenCRUD规范中定义一个。你可以看看它的想法。例如,您可以定义一个输入模型,如:
input CustomerFilter {
AND : [CustomerFilter]
OR : [CustomerFilter]
# Define the fields that you support to search
gender : String
gender_not : String
....
....
...
...
age : Int
age_gte : Int
}
type Query{
customers (filter:CustomerFilter) : [Customer]
}
Run Code Online (Sandbox Code Playgroud)
查询变为:
{
customers (filter : {
OR: [
{ gender : 'MALE' } ,
{ age_gte: 20 }
]
}){
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
这是另一个可供参考的过滤器模型。我们的想法是量身定制它,使其足以处理您的所有应用程序需求,而不会引入任何不必要的过滤复杂性。
此外,如果分页可能会返回许多数据,您很可能需要考虑分页之类的东西。这意味着您必须为每个查询的输入参数添加一个偏移量和限制,以某种方式限制返回的记录数,如果您正在执行基于偏移量的分页,或者如果您想在光标中执行此操作,请查看中继规范 -基于分页样式。
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |