javascript - 将查询参数与集合运算符一起使用

标签 javascript reactjs rest api graphql

在 GraphQL 中,如何最好地设计一种“API 查询语言”来使用运算符过滤项目集合?

例如,在 REST 中,您可以使用诸如

之类的参数

/family/people?height="192"&weight[]=">=65"&weight[]="<=100"

在 GraphQL 中,在 GraphQL 层之外实现查询逻辑似乎违背了最佳实践:

{
    family {
        people(height: 192, weight: ['>=65','<=100']) {
            givenName
            surName
            age
        }
    }
}

尽管执行以下操作似乎过于冗长且不太干燥:

{
    family {
        people(height: 192, weightGte: '65', weightLte: '100') {
            givenName
            surName
            age
        }
    }
}

对于具有运算符(如> < >= <= == != *)的查询参数是否有约定?

最佳答案

我不会说这本身是一个 graphQL 问题,而是 - 您将选择在解决方案中使用的方法。

假设我们正在谈论 JS(考虑到你的标签),我会用一个函数来包装你的查询,类似于:

function getPeople(height, weight) {
  let [0: weightGte, 1: weightLte ] = weight;
  return {
    family {
        people(height, weightGte, weightLte) {
            givenName
            surName
            age
        }
    }
  }
}

根据您的 js 风格和创建查询文档的方式,您可以简单地使用不同的参数调用它。

如果您重复使用相同的参数,则可以缓存文档并使用缓存的版本:

const commonUseCase = getPeople(192, [65, 100]);

//elsewhere in your code

query(commonCase).then(...

关于javascript - 将查询参数与集合运算符一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013872/

相关文章:

javascript - 奇怪的 HTML/JS/CSS 滚动条功能难题

reactjs - 从 react.js 中的 url 获取 id

rest - 如何从请求中读取然后使用该结果来执行 POST 请求然后处理其结果

http - EntityTag - 值(value),缓存,比较 - 如何在 Jersey

javascript - Jekyll:JavaScript 中的液体标签

javascript - 如何制作它以便当您在按钮上滚动时出现菜单

javascript - React 组件在 onClick 事件后不会重新渲染

javascript - 样式组件未将样式应用于自定义功能 react 组件

testing - 如何使用 Zend 测试 rest api?

javascript - 如何在 Highcharts 中为图例设置不同的光标样式?