问题描述
我想在调用查询时将 Apollo iOS 客户端 GraphQL 查询的 url 打印到 Xcode 控制台。
解决方法
我不知道如何将所有 Apollo url 调用打印到控制台,但是通过扩展 GraphQLQuery,我可以访问操作名称、操作 ID 和变量,我可以使用它们来构建 url。我还打印出查询的操作名称和变量。
<form method="POST" action="{{ object.remove_url }}">
用法:
extension GraphQLQuery {
func printInfo() {
if let variables = self.variables?.JSONString {
let cleanedVariables = variables.replacingOccurrences(of: "\\",with: "")
print("GraphQL Query: \(self.operationName) \(variables))")
if let operationID = self.operationIdentifier {
let url = "\(GraphQLClient.shared.url)?extensions={\"persistedQuery\":{\"sha256Hash\":\"\(operationID)\",\"version\":1}}&id=\(operationID)&operationName=\(self.operationName)&variables=\(cleanedVariables)"
print("GraphQL URL",url)
}
} else {
print("GraphQL Query: \(self.operationName)")
if let operationID = self.operationIdentifier {
let url = "\(GraphQLClient.shared.url)?extensions={\"persistedQuery\":{\"sha256Hash\":\"\(operationID)\",\"version\":1}}&id=\(operationID)&operationName=\(self.operationName)"
print("GraphQL URL",url)
}
}
}
}
示例输出:
let standingsQuery = GetStandingsForSportQuery(sportID: sportIDInt,season: season)
standingsQuery.printInfo()
本示例中的 url 格式可能不典型,因为我们使用的是持久化查询。我使用 Charles 代理查看发送的实际 url,因此我知道格式。
您还可以扩展 GraphQLOperation 而不是 GraphQLQuery 来获取相同的信息,这也将支持突变和订阅。
,您无需编写 swift 代码来提取 QueryName。
使用 Proxyman,就像 Charles Proxy。默认情况下,它会在列上显示 QueryName。