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

拦截器


HTTP拦截器

Apollo HTTP拦截器

支持多平台HttpInterceptor类似于OkHttp拦截器。使用它们添加身份验证头部、记录网络调用或做其他任何事情。

该接口包含一个方法。例如,实现一个身份验证拦截器可以使用以下代码:

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。它们在发送操作前自定义或集中响应非常有用。例如,您可以使用它们跟踪特定错误或实现认证,如果服务器在GraphQL级别而不是HTTP级别处理它。在底层,Apollo使用标准化缓存APQ特性与ApolloInterceptor

类似于HttpInterceptorApolloInterceptor也有一个单一的方法,但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客户端
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,商业名称:Apollo GraphQL。

隐私政策

公司