微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Apollo iOS 客户端 GraphQL 查询变量和 URL 记录到控制台?

如何解决将 Apollo iOS 客户端 GraphQL 查询变量和 URL 记录到控制台?

我想在调用查询时将 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。

参考:https://docs.proxyman.io/advanced-features/graphql

GraphQL QueryName with Proxyman

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。