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

拦截器


HTTP 拦截器

Apollo HTTP 拦截器

支持多平台HttpInterceptorOkHttp拦截器非常相似,使用它们来添加身份验证头、记录网络调用或其他。

接口是一个方法。例如,实现身份验证拦截器可以使用以下方式

class AuthorizationInterceptor(val token: String) : HttpInterceptor {
override suspend fun intercept(request: HttpRequest, chain: HttpInterceptorChain): HttpResponse {
return chain.proceed(request.newBuilder().addHeader("Authorization", "Bearer $token").build())
}
}

然后将其添加到您的HttpNetworkTransport

val apolloClient = ApolloClient.Builder()
.serverUrl("https://example.com/graphql")
.addHttpInterceptor(AuthorizationInterceptor(token))
.build()

Apollo Kotlin附带ClientAwarenessInterceptorLoggingInterceptor,您可以在 ApolloClient 上设置。

OkHttp 拦截器

如果您的项目是 Android 或 JVM 专用项目,并且您已经有一个OkHttp Interceptor,您也可以重复使用它:

val okHttpClient = OkHttpClient.Builder()
.addInterceptor(interceptor)
.build()
val apolloClient = ApolloClient.Builder()
.serverUrl("https://example.com/graphql")
.okHttpClient(okHttpClient)
.build()

GraphQL 拦截器

Apollo还支持在级别拦截器:ApolloInterceptor。它们在有需要更改请求发送前或对响应作出反应时非常有用,并且可以集中管理。例如,可以用来追踪某些错误,或者在服务器在级别而不是HTTP级别处理认证的情况下实现认证。Apollo底层实现了规范化缓存APQ特性,这些功能都是通过ApolloInterceptor来实现的。

HttpInterceptor类似,ApolloInterceptor也有一个方法,但其API基于Flow。请记住,Flow可以发射多次,例如在的情况下。

下面是一个记录拦截器的示例

class LoggingApolloInterceptor: ApolloInterceptor {
override fun <D : Operation.Data> intercept(request: ApolloRequest<D>, chain: ApolloInterceptorChain): Flow<ApolloResponse<D>> {
return chain.proceed(request).onEach { response ->
println("Received response for ${request.operation.name()}: ${response.data}")
}
}
}

然后将拦截器添加到您ApolloClient中:

val apolloClient = ApolloClient.Builder()
.serverUrl("https://example.com/graphql")
.addInterceptor(LoggingApolloInterceptor())
.build()
上一页
问题排查
下一页
自定义HTTP客户端
评价文章评价

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私政策

公司