与我们一起从10月8日至10日在纽约市参加活动,了解关于GraphQL联盟和API平台工程的最新技巧、趋势和新闻。加入我们参加2024年纽约市的GraphQL峰会
文档
免费开始

使用自定义的HTTP客户端


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

平台HTTP客户端
Android/JVMOkHttp
JavaScript/Wasmfetch() / Node Fetch 用于HTTP,Ktor 用于WebSocket
iOS/MacOSNSURLSession

实现自己的HTTP引擎

您可以通过创建一个自定义类来实现Apollo Kotlin中的HttpEngine接口来使用不同的HTTP客户端。

HttpEngine接口定义了两个函数:execute和close。以下是一个包含一些辅助方法示例实现:HttpEngine接口。这里是一个包含辅助方法的示例实现:

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 close() {
// Dispose any resources here
}
}

此示例使用一个异步的wrappedClient,它在一个单独的线程中运行网络请求。注意,由于HttpEngine.execute自身是从后台线程中调用的,你可以在execute()中进行阻塞。

使用您的 HttpEngine

在您创建HttpEngine实现后,您可以使用以下方式将其注册到您的ApolloClient实例中ApolloClient.Builder.httpEngine进行注册:

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

此配置下,Apollo Kotlin会使用操作请求发送到MyHttpEngine

Ktor引擎

一个基于KtorHttpEngine实现可在apollographql/apollo-kotlin-ktor-support找到。

其他HTTP定制

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

  • 无运行时:您可以完全选择退出Apollo Kotlin运行时,只使用生成的模式和解析器。如果您不需要任何运行时功能(缓存、批处理、等),请选择此选项。
  • HTTP拦截器: 如果您想在请求中添加HTTP头部和/或日志记录,HTTP拦截器允许您用最少的代码完成此操作。
上一页
拦截器
下一页
不使用apollo-runtime使用模型
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,简称Apollo GraphQL。

隐私政策

公司