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

使用自定义 HTTP 客户端


默认情况下,针对不同的平台/语言使用以下 HTTP 客户端:

平台HTTP 客户端
AndroidOkHttp
JavaScriptKtor
iOS/MacOSNSURLSesssion

您可以通过创建一个实现 Apollo KotlinHttpEngine接口的类来使用不同的 HTTP 客户端。

HttpEngine 接口

HttpEngine 接口定义了两个函数: execute 和 dispose。。以下是一个示例实现,还包括一些辅助方法:executedispose

class MyHttpEngine(val wrappedClient: MyClient) : HttpEngine {
/**
* Helper function to map the Apollo requests to MyClient requests
*/
private fun HttpMethod.toMyClientRequest(): MyClientRequest {
...
}
/**
* And the other way around
*/
private fun MyClientResponse.toApolloResponse(): HttpResponse {
...
}
override suspend fun execute(request: HttpRequest) = suspendCancellableCoroutine { continuation ->
val call = wrappedClient.newCall(request.toMyClientRequest())
continuation.invokeOnCancellation {
// If the coroutine is cancelled, also cancel the HTTP call
call.cancel()
}
wrappedClient.enqueue(
call,
success = { myResponse ->
// Success! report the response
continuation.resume(myResponse.toApolloResponse())
},
error = { throwable ->
// Error. Wrap in an ApolloException and report the error
continuation.resumeWithException(ApolloNetworkException(throwable))
}
)
}
override fun dispose() {
// Dispose any resources here
}
}

此示例使用异步 wrappedClient 在单独的线程中运行网络请求。请注意,由于 HttpEngine itself 是从后台线程中调用的,因此您可以在 execute 中安全地阻塞。

使用您的 HttpEngine

创建您的 HttpEngine 实现后,您可以使用 ApolloClient 实例,使用 ApolloClient.Builder.httpEngine 注册:

// Use your HttpEngine
val client = ApolloClient.Builder()
.serverUrl(serverUrl = "https://com.example/graphql")
.httpEngine(httpEngine = MyHttpEngine(wrappedClient))
.build()

使用此配置,Apollo Kotlin 会发送所有的 操作请求,并使用 MyHttpEngine

其他 HTTP 定制

除了实现 HttpEngine,Apollo Kotlin 还支持其他方法来自定义 HTTP 行为:

  • 无运行时:您可以选择不使用 Apollo Kotlin 运行时,而仅使用生成的模型和解析器。如果不需要任何运行时功能(缓存、分批、自动持久化查询等),请使用此选项。
  • HTTP 拦截器:如果您想为请求添加 HTTP 头部信息并/或记录,HTTP 拦截器允许您用最少的代码做这件事。
上一页
HTTP 拦截器
下一页
在不使用 apollo-runtime 的情况下使用模型
评分文章评分在 GitHub 上编辑编辑论坛Discord

©2024Apache Graph Inc.,商号 Apache Graph Query Language。

隐私策略

公司