如何使用Apollo iOS客户端实现graphql订阅 [英] How to implement graphql subscription using apollo ios client
本文介绍了如何使用Apollo iOS客户端实现graphql订阅的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用apollo ios客户端实现graphql订阅.但是由于缺乏文档示例,因此无法弄清楚.阿波罗文档中给出的示例是:
I am trying to implement graphql subscription using apollo ios client. But not able to figure it out as lack of documentation examples. Example given on apollo documentation is:
let apollo: ApolloClient = {
let configuration = URLSessionConfiguration.default
// Add additional headers as needed
configuration.httpAdditionalHeaders = ["Authorization": "Bearer <token>"] // Replace `<token>`
let url = URL(string: "http://localhost:8080/graphql")!
return ApolloClient(networkTransport: HTTPNetworkTransport(url: url, configuration: configuration))
}()
推荐答案
通过以下步骤在apollo ios graphql客户端中实现订阅.
Implement the subscription in apollo ios graphql client by following below steps.
-
使用cocoapods:
Using cocoapods:
-
pod'Apollo'
-
pod'Apollo/WebSocket'
-
pod安装
创建客户端以支持订阅和身份验证.在 AppDelegate.swift
中添加以下代码:
- Websocket-我们必须使用
WebSocketTransport
和URLRequest
- 身份验证-我们必须将连接参数
connectingPayload
中的auth参数传递给服务器.对于http,我们正在问题片段中提到的标头中传递它. -
SplitNetworkTransport
-组合http
和websocket
来创建客户端.我们必须使用httpNetworkTransport
和webSocketNetworkTransport
- Websocket - we have to use
WebSocketTransport
andURLRequest
- Authentication - we have to pass auth parameters in connection params
connectingPayload
to server. And for http we are passing it in headers as mentioned in question snippet. SplitNetworkTransport
- To combine bothhttp
andwebsocket
to create client. we have to usehttpNetworkTransport
andwebSocketNetworkTransport
lazy var apollo: ApolloClient = {
let authPayloads = [
"Authorization": "Bearer "
]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = authPayloads
let map: GraphQLMap = authPayloads
let wsEndpointURL = URL(string: "ws://localhost:8080/subscriptions")!
let endpointURL = URL(string: "http://localhost:8080/api")!
let websocket = WebSocketTransport(request: URLRequest(url: wsEndpointURL), connectingPayload: map)
let splitNetworkTransport = SplitNetworkTransport(
httpNetworkTransport: HTTPNetworkTransport(
url: endpointURL,
configuration: configuration
),
webSocketNetworkTransport: websocket
)
return ApolloClient(networkTransport: splitNetworkTransport)
}()
这篇关于如何使用Apollo iOS客户端实现graphql订阅的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文