我应该在使用 Retrofit 的每个请求中传递我的 APIKEY 吗?
Should I pass my APIKEY in every request I do with Retrofit?
我想知道将我的 APIKEY 放入所有 REST 请求中而不必将其添加到请求参数中的最佳方法。
目前我只有几个电话,但我想看得更远。
@GET(".")
fun getSearch(@Query("s") text: String, @Query("apikey") APIKEY: String) : Observable<ResponseSearch>
我想知道是否有办法在每次调用的变量中不包含 APIKEY
最好为你的请求提供一个中间件,所有查询都通过它传递,你将有一个单一的添加 APIkey 的点,我也希望它能将它添加到 header而不是查询参数
可以,但更好的解决方案是使用 Okhttp Interceptors
这是一个例子:
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)
}
}
您还应该将 TokenInterceptor 添加到您的 Okhttp 客户端构建器中
val client = OkHttpClient.Builder()
.addInterceptor(TokenInterceptor(SharedPreferencesStorage()))
.build()
我想知道将我的 APIKEY 放入所有 REST 请求中而不必将其添加到请求参数中的最佳方法。
目前我只有几个电话,但我想看得更远。
@GET(".")
fun getSearch(@Query("s") text: String, @Query("apikey") APIKEY: String) : Observable<ResponseSearch>
我想知道是否有办法在每次调用的变量中不包含 APIKEY
最好为你的请求提供一个中间件,所有查询都通过它传递,你将有一个单一的添加 APIkey 的点,我也希望它能将它添加到 header而不是查询参数
可以,但更好的解决方案是使用 Okhttp Interceptors
这是一个例子:
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)
}
}
您还应该将 TokenInterceptor 添加到您的 Okhttp 客户端构建器中
val client = OkHttpClient.Builder()
.addInterceptor(TokenInterceptor(SharedPreferencesStorage()))
.build()