我们正在使用GraphQL作为数据聚合引擎的查询语言。
我正在寻找在GraphQL中表示简单(或复杂)算术计算函数的想法,这些想法涉及架构中定义的现有类型/属性,并且可以在现有属性上使用。
我正在研究自定义标量和指令
示例-
{
item{
units
price_per_unit
market_price: function:multiply(units, price_per_unit)
market_price_usd: function:usdPrice(units, price_per_unit, currency)
}
}
在GraphQL
模式中,已经将function:multiply定义为类型
functions {
multiply(operand 1, operand2) {
result
}
usdPrice(operand1, operand2, currency) {
result: {
if(currency == GBP) {
operand1 * operand2 * .76
}
{
}
内部解析器会将操作数1和操作数2相乘以创建结果。
答案 0 :(得分:0)
这不是GraphQL特别擅长的。到目前为止,最简单的操作是检索各个字段,然后在客户端上进行计算,例如
data.item.forEach((i) => { i.total_price = i.units * i.price_per_unit });
尤其是,无法在GraphQL中运行任何形式的“子查询”。像您已经展示的那样,给定一个“乘”函数,没有GraphQL语法可以让您使用任何特定输入来“调用”它。
如果您认为特定的计算值足够通用,则也可以将它们添加到GraphQL架构中,如果使用自定义解析程序功能进行请求,则可以在服务器端进行计算。
type Item {
units: Int!
pricePerUnit: CurrencyValue!
# computed, always units * pricePerUnit
marketPrice: CurrencyValue!
}
type CurrencyValue {
amount: Float!
currency: Currency!
# computed, always amount * currency { usd }
usd: Float!
}
type Currency {
code: String!
"1 currency = this many US$"
usd: Float!
}
允许类似的查询
{
item {
marketPrice { usd }
}
}