【问题标题】:How do you filter a list response using a graphql query in Sangria如何在 Sangria 中使用 graphql 查询过滤列表响应
【发布时间】: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 的元素的查询?

【问题讨论】:

    标签: graphql sangria


    【解决方案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前端的数据使用directivegraphql的其他方式。浪费带宽。

    【讨论】:

    • 我明白你的意思,但是我一直在寻找一个过滤器,即missions(missionId(id: "mission1")),但听起来这也是必须在服务器端实现的东西?
    • @reikje 是的。它是。您不应该在客户端过滤数据。
    猜你喜欢
    • 2016-12-18
    • 2019-06-10
    • 1970-01-01
    • 2020-08-23
    • 2018-05-31
    • 2020-01-12
    • 2020-07-06
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多