我希望能够检查,验证和修改一些现有的graphql语句。例如,我使用模板生成以下内容,并从Elasticsearch获取数据
Sub PageBr()
Const cStrName As String = "HPBr"
Const cStrRange As String = "B50:B250"
Dim nmAddress As String
Dim i As Integer
Dim j As Integer
With Sheet1
' Define a name (Refers to ThisWorkbook (.Parent)).
.Parent.Names.Add cStrName, .Range("B50:B250")
nmAddress = .Parent.Names(cStrName).RefersToRange.Address
' Add horizontal pagebreaks.
With .HPageBreaks
.Add Before:=.Parent.Range("A59")
.Add Before:=.Parent.Range("B159")
.Add Before:=.Parent.Range("A248")
.Add Before:=.Parent.Range("D269")
End With
' Range version
For i = 1 To .HPageBreaks.Count
If Not Intersect(.Range(.HPageBreaks(i).Location.Address) _
.Resize(, .Columns.Count), .Range(nmAddress)) Is Nothing Then
j = j + 1
End If
Next
Debug.Print "The named range '" & cStrName & "' contains " & j _
& " horizontal pagebreaks."
' Row version
Dim pbRow As Long
Dim nmRow1 As Long
Dim nmRow2 As Long
nmRow1 = .Range(nmAddress).Row
nmRow2 = .Range(nmAddress).Rows.Count + .Range(nmAddress).Row - 1
j = 0
For i = 1 To .HPageBreaks.Count
pbRow = .Range(.HPageBreaks(i).Location.Address).Row
If pbRow >= nmRow1 And pbRow <= nmRow2 - 1 Then
j = j + 1
End If
Next
Debug.Print "The named range '" & cStrName & "' contains " & j _
& " horizontal pagebreaks."
End With
End Sub
由此,我想做的就是检查id的值,例如访问该值
mutation.productUpdate.input.id
我只发布给第三方,不托管架构或类似内容。
要能够访问和修改有效负载,我需要使用库吗?如果是这样,那么最轻便的是什么?
谢谢
答案 0 :(得分:0)
您控制此查询吗?像这样直接在查询中嵌入值通常不是最佳实践。相反,您可以使用GraphQL variables来使键值与查询本身分开传递。
mutation ProductUpdate($id: ID!, $tags: [String!]) {
productUpdate(input: {id: $id, tags: $tags}) {
product { id tags }
userErrors { field message }
}
}
如果您详细地分解GraphQL规范,则它包含几个主要部分:对象模型;解析GraphQL模式和查询的语法;确保查询与模式匹配的验证规则;对规则实际运行查询的执行规则;和HTTP传输部分(规范中仅此一种)。通常,我所见过的GraphQL库(用几种语言)将所有这些都结合在一起,但是高级用户可以分开。
使用相当成熟的GraphQL库,任何语言都可能实现您正在描述的内容,但是它不会具有非常方便的语法。摘要,您需要:
从服务中获取模式(有一个标准的GraphQL查询可以检索它,许多库都可以接受该JSON形式作为输入)。
使用您选择的库将建议的查询解析为抽象语法树(AST)。
找到您对AST结构感兴趣的值;修改它,如果那是您要尝试的并且允许的话。
使用GraphQL库针对AST验证查询。
将AST序列化回GraphQL查询。
以通常的方式将查询提交到服务器。
如果您不控制查询,那么我最初描述的变量方案可能会造成一些麻烦。您可能会发现(例如在我的示例查询中)字段的值是变量引用。您可以重写它,但it's a validation error to have unused variables可以重写,因此您可能也不得不(也许)删除变量,这会变得很麻烦。