我应该在使用 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()