Apollo GraphQL 标头总是在 iOS Swift 中失败
我第一次在我的 swift 项目中使用 Apollo GraphQL 客户端.遵循他们文档中提到的所有步骤,并通过谷歌搜索我的问题,但没有运气.我已经通过在我的请求 URL 中传递一个标头来提出一个查询请求,但它总是给我一个失败的错误消息,比如 failure(Apollo.LegacyParsingInterceptor.LegacyParsingError.couldNotParseToLegacyJSON(data: 1839 bytes)).我已经提到了 link 的答案,但这不适用于我.任何帮助将不胜感激.
I am working with the Apollo GraphQL client for the first time in my swift project. Followed all the steps mentioned in their document and searched over google for my issue but had no luck. I have made a query request by passing a header in my request URL but it always gives me a failure with error msg like failure(Apollo.LegacyParsingInterceptor.LegacyParsingError.couldNotParseToLegacyJSON(data: 1839 bytes)). I have referred answer of link but this is not worked for me. Any Help will be most appreciated.
导入 UIKit
导入阿波罗
class Network {
static let shared = Network()
private(set) lazy var apollo: ApolloClient = {
let cache = InMemoryNormalizedCache()
let store1 = ApolloStore(cache: cache)
let client1 = URLSessionClient()
let provider = NetworkInterceptorProvider(store: store1, client: client1)
let url = URL(string:"https://Storename.myshopify.com/admin/api/2021-04/graphql")!
let requestChainTransport = RequestChainNetworkTransport(interceptorProvider: provider,endpointURL: url)
return ApolloClient(networkTransport: requestChainTransport,
store: store1)
}()}
class RequestOrderDetailInterceptor: ApolloInterceptor {
func interceptAsync<Operation: GraphQLOperation>(
chain: RequestChain,
request: HTTPRequest<Operation>,
response: HTTPResponse<Operation>?,
completion: @escaping (Result<GraphQLResult<Operation.Data>, Error>) -> Void) {
request.addHeader(name: "X-Shopify-Access-Token", value: "MyToken")
print( "Outgoing request: \(request)")
chain.proceedAsync(request: request,
response: response,
completion: completion)
}
}
class ResponseOrderDetailInterceptor: ApolloInterceptor {
enum ResponseLoggingError: Error {
case notYetReceived
}
func interceptAsync<Operation: GraphQLOperation>(
chain: RequestChain,
request: HTTPRequest<Operation>,
response: HTTPResponse<Operation>?,
completion: @escaping (Result<GraphQLResult<Operation.Data>, Error>) -> Void) {
request.addHeader(name: "X-Shopify-Access-Token", value: "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")
defer {
chain.proceedAsync(request: request,
response: response,
completion: completion)
}
guard let receivedResponse = response else {
chain.handleErrorAsync(ResponseLoggingError.notYetReceived,
request: request,
response: response,
completion: completion)
return
}
print("HTTP Response: \(receivedResponse.httpResponse)")
if let stringData = String(bytes: receivedResponse.rawData, encoding: .utf8) {
print("Data: \(stringData)")
} else {
print("Could not convert data to string!")
}
}
}
struct NetworkInterceptorProvider: InterceptorProvider {
// These properties will remain the same throughout the life of the `InterceptorProvider`, even though they
// will be handed to different interceptors.
private let store: ApolloStore
private let client: URLSessionClient
init(store: ApolloStore,
client: URLSessionClient) {
self.store = store
self.client = client
}
func interceptors<Operation: GraphQLOperation>(for operation: Operation) -> [ApolloInterceptor] {
return [
MaxRetryInterceptor(),
LegacyCacheReadInterceptor(store: self.store),
RequestOrderDetailInterceptor(),
NetworkFetchInterceptor(client: self.client),
ResponseOrderDetailInterceptor(),
ResponseCodeInterceptor(),
LegacyParsingInterceptor(cacheKeyForObject: self.store.cacheKeyForObject),
AutomaticPersistedQueryInterceptor(),
LegacyCacheWriteInterceptor(store: self.store)
]
}
}
//这里我使用我的 apollo 客户端来获取记录
//Here I am using my apollo client to fetch records
func getOrderDetails(){
Network.shared.apollo.fetch(query: OrderDetailsByIdQuery(id: GraphQL.ID(rawValue: "Z2lkOi8vc2hvcGlmeS9PcmRlci8zNzcxODAxNjk4NDY5P2tleT1kNGRiMmVhODFlNGVlNzg1NzhhMDQ4ODI2Mzc4ZTkxMw==").rawValue)) { result in
print(result)
switch result {
case .success(let graphQLResult):
print("Oreder Details:",graphQLResult.data?)
case .failure(let error):
print("Error loading data \(error.localizedDescription)")
}
}
}
我看到您最近对别人问题的评论,想知道您是否取得了任何成功?这是我发现您评论的问题.
I saw your recent comment on someone else's issue and just wondering if you've had any success? Here's the issue where I found your comment.