Приклад підручника OkHttp Android

OkHttp є потужним HTTP-клієнтом для платформи Android, що забезпечує як синхронні, так і асинхронні методи для здійснення HTTP-запитів. Крім стандартних функцій HTTP, OkHttp пропонує розширені можливості, такі як кешування, перехоплення запитів та підтримка WebSocket протоколу.

У цьому посібнику ми розглянемо кроки використання OkHttp для реалізації HTTP-запитів у додатках Android. Ми почнемо з базових прикладів, а потім перейдемо до більш складних тем, таких як ефективне використання кешування та перехоплення.

Базовий приклад запиту

Виконання HTTP-запиту за допомогою OkHttp є доволі простим процесом. Для надсилання GET-запиту на веб-сайт можна скористатись наступним кодом:

java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("https://example.com")
.build();

Response response = client.newCall(request).execute();

Цей код ініціалізує клієнт OkHttp, створює об’єкт запиту з вказаною URL-адресою та виконує запит за допомогою методу execute(). Результатом виконання запиту є об’єкт типу Response, що містить в собі заголовки відповіді, код стану, а також вміст відповіді (за наявності).

Асинхронні запити

За замовчуванням, OkHttp виконує HTTP-запити у синхронному режимі, тобто потік, з якого викликано запит, блокується до моменту отримання відповіді. Однак, OkHttp також дозволяє виконувати запити асинхронно, використовуючи метод enqueue().

Метод enqueue() приймає callback-функцію, яка викликається після отримання відповіді. Нижче наведено приклад того, як відправити асинхронний GET-запит:

java
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("https://example.com")
.build();

client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// Обробка помилки тут
}

@Override
public void onResponse(Call call, Response response) throws IOException {
// Обробка відповіді тут
}
});

У наведеному прикладі, enqueue() метод запускає новий потік і повертається відразу. Callback-функція викликається в окремому потоці після отримання відповіді.

Кешування

OkHttp має можливість автоматичного кешування HTTP-відповідей, що допомагає зменшити кількість мережевих запитів, необхідних для отримання даних. Використання кешування може суттєво збільшити продуктивність вашого додатку, особливо при роботі з повільними мережами.

Для активації кешування, клієнт OkHttp потрібно налаштувати за допомогою об’єкта типу Cache:

java
import java.io.File;

OkHttpClient client = new OkHttpClient.Builder()
.cache(new Cache(new File("/tmp/okhttp-cache"), 10 * 1024 * 1024))
.build();

В цьому прикладі кеш буде зберігатися у файлі /tmp/okhttp-cache, а його максимальний розмір становить 10 МБ.

Перехоплення запитів

Перехоплювачі (interceptors) – це об’єкти, які можуть вбудовуватись у стек викликів OkHttp для перехоплення та модифікації HTTP-запитів та відповідей. Перехоплювачі можуть бути використані для різних цілей, наприклад, для додавання заголовків авторизації, верифікації квот або обробки відповідей.

Щоб додати перехоплювач до клієнта OkHttp, використовуйте метод addInterceptor():

java
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();

// Додаємо заголовок авторизації до запиту
Request newRequest = request.newBuilder()
.addHeader("Authorization", "Bearer <token>")
.build();

return chain.proceed(newRequest);
}
})
.build();

У наведеному прикладі, перехоплювач додається до кінця стека викликів OkHttp. Перехоплювач отримує об’єкт Chain, що містить поточний запит та методи для продовження викликів. Перехоплювач модифікує запит, додаючи заголовок авторизації, а потім передає модифікований запит наступному перехоплювачу або до фінальної обробки.

Підсумки

OkHttp — це потужний та гнучкий HTTP-клієнт для Android, що надає широкий набір функцій для надсилання запитів, кешування відповідей, а також гнучкого налаштування запитів та відповідей за допомогою перехоплювачів.

Використання OkHttp у ваших Android-додатках може значно покращити їхню продуктивність та функціональність. Він спрощує процес надсилання HTTP-запитів, дозволяє використовувати кешування для зменшення затримки та надає надійний механізм перехоплення для налаштування поведінки HTTP.

Часті запитання

Що таке OkHttp?

OkHttp – це HTTP-клієнт для Android, який надає можливість виконання як синхронних, так і асинхронних HTTP-запитів.

Як відправляти HTTP-запити за допомогою OkHttp?

Для відправки HTTP-запитів за допомогою OkHttp, потрібно створити клієнт OkHttp, створити об’єкт запиту та виконати запит за допомогою методу execute().

Чи підтримує OkHttp асинхронні запити?

Так, для відправки асинхронних HTTP-запитів використовується метод enqueue(). Callback-функція, передана в enqueue(), викликається після отримання відповіді.

Що таке кешування?

Кешування – це процес збереження даних у швидкому сховищі для подальшого їх використання. OkHttp може кешувати HTTP-відповіді для зменшення кількості мережевих запитів.

Як включити кешування в OkHttp?

Для увімкнення кешування в OkHttp, необхідно налаштувати клієнт OkHttp за допомогою об’єкта Cache.

Що таке перехоплення?

Перехоплювачі – це об’єкти, які можна вставляти у стек викликів OkHttp для перехоплення та зміни HTTP-запитів та відповідей. Їх можна використовувати для додавання заголовків авторизації або обробки відповідей.

Як додати перехоплювач до клієнта OkHttp?

Для додавання перехоплювача використовується метод addInterceptor(). Перехоплювач отримує об’єкт Chain, що містить поточний запит та методи для продовження стека викликів.

Як кешування сприяє покращенню продуктивності додатків?

Кешування покращує продуктивність за рахунок зменшення кількості мережевих запитів, необхідних для отримання даних, що особливо актуально для додатків, які отримують дані через повільні мережі.

Як перехоплювачі допомагають налаштувати поведінку HTTP?

Перехоплювачі дозволяють розробникам налаштувати поведінку HTTP, додаючи заголовки авторизації, перевіряючи квоти або змінюючи відповіді.