加入我们,于10月8日至10日参加纽约市的活动,了解关于GraphQL联邦和API平台工程的最新技巧、趋势和新闻。加入我们,参加2024年纽约市的GraphQL峰会
文档
免费开始
您正在查看此软件先前版本的文档。 切换到最新稳定版本。

Apollo Kotlin中的订阅


  • WebSocket
    • subscriptions-transport-ws (⚠️ 未经维护!)
    • graphql-ws
    • appsync(也使用graphql-ws作为Sec-WebSocket-Protocol

您必须使用您的GraphQL端点支持的任何传输方式。

您在应用中定义订阅与定义类似,除了您使用subscription关键字。以下是一个订阅示例,用于获取每当数字增加时该数字的最新值:

subscription NumberIncremented {
numberIncremented
}

与查询和不同,操作只能包含一个 ,这里的字段指的是Subscription类型的字段。要订阅多个字段,需要创建多个订阅操作

配置WebSocket订阅

默认情况下,Apollo Kotlin使用subscriptions-transport-ws协议来通过进行交互,这是通过SubscriptionWsProtocol类实现的。该协议现已不再积极维护。它目前保留为默认选项以实现向后兼容。

Apollo Kotlin的将来的版本将默认使用更新后的graphql-ws协议和GraphQLWsProtocol类。如果你的服务器已经使用graphql-ws,请确保设置你的WsProtocolGraphQLWsProtocol

要使用WebSocket进行订阅,使用WebSocketNetworkTransport

定制你的WebSocket协议

默认情况下,Apollo Kotlin使用subscriptions-transport-ws协议以确保向后兼容,但它支持以下所有WebSocket子协议:

要自定义协议,请使用 WsProtocol 接口。 Apollo Kotlin 内置了对上述子协议的支持:

子协议
subscriptions-transport-wsSubscriptionWsProtocol (默认)
graphql-wsGraphQLWsProtocol
appsyncAppSyncWsProtocol

例如,您可以这样配置一个 graphql-ws 传输:

val apolloClient = ApolloClient.Builder()
.subscriptionNetworkTransport(
WebSocketNetworkTransport.Builder()
.protocol(GraphQLWsProtocol.Factory())
.serverUrl("https://apollo-fullstack-tutorial.herokuapp.com/graphql")
.build()
)
.build()

身份验证

有关使用 WebSocket 进行身份验证的说明,请参阅 本部分

配置 HTTP 订阅

要使用 HTTP 进行 订阅,请使用 HttpNetworkTransport,如下所示:

val apolloClient = ApolloClient.Builder()
.subscriptionNetworkTransport(
HttpNetworkTransport.Builder()
.serverUrl("https://apollo-fullstack-tutorial.herokuapp.com/graphql")
.build()
)
.build()

这是所需的唯一配置。 HttpNetworkTransport 将使用 分块多部分响应来处理 订阅 操作,以及标准 POST 或 GET 请求来查询和 突变

监听订阅

在配置了 NetworkTransport 之后,使用 ApolloClient.subscribe 来打开连接并监听更改:

apolloClient.subscription(TripsBookedSubscription())
.toFlow()
.collect {
println("trips booked: ${it.data?.tripsBooked}")
}

由于 订阅 是长时间运行的 操作,它们返回一个 Flow<Response> 而不是单个 Response

终止订阅

终止通过协程作用域处理。取消协程以终止 订阅

默认情况下,所有活动的 订阅 之间共享单个 WebSocket。在没有活动订阅时,WebSocket 在可配置的超时后关闭。

错误处理

与查询一样, 订阅 支持使用 GraphQL 错误的局部响应,这些错误在 Flow 中发出。

网络错误会终止,并需要重试以获取新的更新。根据情况,重试可能会打开新的 WebSocket 或重启订阅。

另请参阅本部分关于处理 WebSocket 错误。

上一部分
变体
下一部分
GraphQL 变量
评分文章评分在 GitHub 上编辑编辑论坛Discord

©2024Apollo Graph Inc.,作为 Apollo GraphQL 运营商。

隐私政策

公司