Добавление заголовка ко всем запросам Retrofit 2 и OkHttp

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для автоматического добавления заголовков ко всем запросам в Retrofit 2 применяются перехватчики (interceptors). Необходимо реализовать интерфейс Interceptor и применить его в OkHttpClient:

Java
Скопировать код
public class UniversalHeaderInterceptor implements Interceptor {
  @Override
  public Response intercept(Chain chain) throws IOException {
    Request modifiedRequest = chain.request().newBuilder()
        .addHeader("Header-Name", "Value")
        .build();
    return chain.proceed(modifiedRequest);
  }
}

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new UniversalHeaderInterceptor())
    .build();

Инициализируйте экземпляр Retrofit с настроенным клиентом, чтобы каждый запрос содержал требуемые заголовки.

Кинга Идем в IT: пошаговый план для смены профессии

Работа с заголовками с помощью Retrofit 2

Retrofit 2 значительно упрощает работу с заголовками при использовании перехватчиков OkHttp. Данный инструмент передает сетевые операции на уровень OkHttp, позволяя легко формировать запросы.

Применение перехватчиков

Перехватчики эффективно справляются с такими задачами, как:

  • Аутентификация: контроль над передачей OAuth-токенов с помощью заголовков.
  • Выбор формата данных: указание формата получаемых данных с помощью заголовка Accept.

Возможности перехватчиков

Метод intercept() из Interceptor многофункционален и может использоваться для решения множества задач:

  • Общие параметры: автоматическое добавление API-ключей или информации сессии в каждый запрос.
  • Повторение неудачных запросов: внедрение логики автоматического повтора.
  • Логирование: отслеживание нужной информации для последующей отладки.

Визуализация

Можно сравнить Retrofit 2 с массивом (🟧), в котором каждый запрос – это элемент (⬜):

До добавления заголовков: 🟧
Последовательность запросов: [⬜, ⬜, ⬜]

Добавляя заголовки, представьте, что вы присваиваете идентификатор (⚫) каждому элементу:

Процесс: 🟧 + ⚫ ➡️ Каждому элементу массива присваивается идентификатор (Заголовок)

С добавленным заголовком каждый запрос получает уникальный идентификатор:

После: 
Массив запросов: [⚫⬜, ⚫⬜, ⚫⬜] // Все запросы снабжены заголовками

Таким образом, благодаря общему массиву заголовков, каждый запрос можно точно идентифицировать.

Подготовка заголовков при необходимости

В условиях изменяемости запросы могут требовать различных заголовков. Retrofit 2 упрощает процесс их добавления через аннотации @Header и @Headers:

  • @Header: динамическое добавление заголовков через параметры метода.
  • @Headers: добавление статических заголовков к запросам,указанных перед объявлением метода.

Неотъемлемые инструменты

К таким составляющим, как GsonConverterFactory для работы с JSON и метод .baseUrl() для указания основного URL API, добавьте HttpLoggingInterceptor для детального логирования. Однако, используйте логирование осторожно, ограничив его билдами разработки.

Перехватчики: Обычный Джо или Шерлок Холмс?

OkHttpClient различает два типа перехватчиков: Application Interceptors (Обычный Джо) и Network Interceptors (Шерлок Холмс):

  • Джо: проверяет каждый запрос и ответ, не занимаясь кэшированием данных.
  • Шерлок: активируется только если ответ получен напрямую из сети, что делает его идеальным для мониторинга и логирования.

Полезные материалы

  1. Использование Retrofit 2.x как REST клиента – Учебник — Практическое руководство по работе с Retrofit.
  2. Использование OkHttp | CodePath Android Cliffnotes — Руководство по использованию перехватчиков OkHttp.
  3. Retrofit 2 — Управление сетевыми таймаутами — Инструкция по настройке таймаутов в Retrofit.
  4. Задержите минуту... – Добавление пользовательских заголовков запросов в Retrofit 2.
  5. Статья на Medium о аутентификации в Retrofit – Различные стратегии аутентификации с помощью Retrofit.