如何使用Apollo iOS客户端实现graphql订阅 [英] How to implement graphql subscription using apollo ios client

查看:96
本文介绍了如何使用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指南:创建客户端

推荐答案

通过以下步骤在apollo ios graphql客户端中实现订阅.

Implement the subscription in apollo ios graphql client by following below steps.

  1. 使用cocoapods:

  1. Using cocoapods:

  1. pod'Apollo'
  2. pod'Apollo/WebSocket'
  3. pod安装

  • 创建客户端以支持订阅和身份验证.在 AppDelegate.swift 中添加以下代码:

    1. Websocket-我们必须使用 WebSocketTransport URLRequest
    2. 身份验证-我们必须将连接参数 connectingPayload 中的auth参数传递给服务器.对于http,我们正在问题片段中提到的标头中传递它.
    3. SplitNetworkTransport -组合 http websocket 来创建客户端.我们必须使用 httpNetworkTransport webSocketNetworkTransport
    1. Websocket - we have to use WebSocketTransport and URLRequest
    2. 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.
    3. SplitNetworkTransport- To combine both http and websocket to create client. we have to use httpNetworkTransport and webSocketNetworkTransport

  • 
    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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆