我是否应该在使用 Retrofit 执行的每个请求中传递我的 APIKEY?

Bis*_*uit 5 api-key retrofit2 rx-java2

我想知道将 APIKEY 放入所有 REST 请求中的最佳方法,而不必将其添加到请求的参数中。

目前我只接到了几个电话,但我正在尝试进一步了解。

@GET(".")
fun getSearch(@Query("s") text: String, @Query("apikey") APIKEY: String) : Observable<ResponseSearch>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法不在每次调用的变量中包含 APIKEY

Vit*_*lyi 5

可以,但更好的解决方案是使用Okhttp 拦截器

这是一个例子:

class TokenInterceptor(private val preferencesStorage: SharedPreferencesStorage) : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        var original = chain.request()
        val token = preferencesStorage.getAccessToken()
        val url = original.url().newBuilder().addQueryParameter("apikey", token).build()
        original = original.newBuilder().url(url).build()
        return chain.proceed(original)
    }
}
Run Code Online (Sandbox Code Playgroud)

您还应该将 TokenInterceptor 添加到您的 Okhttp 客户端构建器中

val client = OkHttpClient.Builder()
            .addInterceptor(TokenInterceptor(SharedPreferencesStorage()))
            .build() 
Run Code Online (Sandbox Code Playgroud)