如何在 Sangria 中使用 graphql 查询过滤列表响应
Posted
技术标签:
【中文标题】如何在 Sangria 中使用 graphql 查询过滤列表响应【英文标题】:How do you filter a list response using a graphql query in Sangria 【发布时间】:2019-02-06 07:18:30 【问题描述】:我在 Sangria (scala) 上运行一个 graphQL 服务器。这是一个示例查询:
query
missions
missionId id ,
name
和一个示例响应:
"data":
"missions": [
"missionId":
"id": "mission1"
,
"name": "foo"
,
"missionId":
"id": "mission2"
,
"name": "bar"
]
我正在寻找过滤列表并仅返回具有mission1
作为id 的元素的查询?
【问题讨论】:
【参考方案1】:您需要实现分页。将limit
(pageSize
) 参数传递给graphql
服务器resolver
。在服务器端处理数据。
query
missions(limit: 1)
missionId id ,
name
服务器端:
const resolvers =
Query:
missions: (_, limit, ctx) =>
const missions = [];
for(let i = 0; i < limit; i++)
missions.push(db.missions[i])
return missions;
那是graphql
ideology,前端开发者定义数据结构和他们想要获取的数据。
通过http请求查询list
数据是个坏主意。而filter
前端的数据使用directive
或graphql
的其他方式。浪费带宽。
【讨论】:
我明白你的意思,但是我一直在寻找一个过滤器,即missions(missionId(id: "mission1"))
,但听起来这也是必须在服务器端实现的东西?
@reikje 是的。它是。您不应该在客户端过滤数据。以上是关于如何在 Sangria 中使用 graphql 查询过滤列表响应的主要内容,如果未能解决你的问题,请参考以下文章
了解 GraphQL / Sangria-Graphql 中服务器端的特定字段
如何知道 Sangria GraphQL 中对象解析器中的请求字段