Должен ли я передавать свой APIKEY в каждом запросе, который я делаю с Retrofit? - PullRequest
0 голосов
/ 02 октября 2019

Я хотел бы знать, как лучше всего поместить мой APIKEY во все мои REST-запросы, не добавляя его в параметры запроса.

Пока у меня просто есть пара вызовов, но яЯ пытаюсь увидеть дальше.

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

Мне было интересно, есть ли способ не иметь APIKEY в переменных каждого вызова

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Можно, но лучшим решением будет использование 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() 
0 голосов
/ 02 октября 2019

Лучше иметь промежуточное программное обеспечение для ваших запросов, где все запросы будут проходить через него, и там у вас будет единственная точка добавления ключа API, также я бы предпочел, чтобы он добавлял его в заголовок вместо параметров запроса

...