OkHttp
OkHttp — це популярна бібліотека для роботи з HTTP-запитами в Android. Вона надає потужний і гнучкий API для виконання мережевих запитів. OkHttp забезпечує високу продуктивність, простоту використання і підтримує сучасні мережеві протоколи, такі як HTTP/2 і WebSocket.
Чому варто використовувати OkHttp?
- Простота та зручність: Інтуїтивний API для створення і відправки запитів.
- Підтримка HTTP/2: Менше з'єднань і краща швидкість передачі.
- Підтримка WebSocket: Для побудови додатків у реальному часі.
- Масштабованість: Можливість кастомізації через інтерцептори.
- Автоматичне кешування: Зменшення навантаження на сервер і збереження даних офлайн.
Додавання OkHttp до проекту
Щоб використовувати OkHttp у вашому проекті, додайте залежність у build.gradle:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.11.0'
}
Основи використання OkHttp
1. Виконання GET-запиту
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class NetworkUtils {
private final OkHttpClient client = new OkHttpClient();
public String sendGetRequest(String url) throws IOException {
// Створення запиту
Request request = new Request.Builder()
.url(url)
.build();
// Виконання запиту
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
}
}
}
2. Виконання POST-запиту
import okhttp3.*;
import java.io.IOException;
public class NetworkUtils {
private final OkHttpClient client = new OkHttpClient();
public String sendPostRequest(String url, String json) throws IOException {
// Створення тіла запиту
RequestBody body = RequestBody.create(json, MediaType.get("application/json; charset=utf-8"));
// Створення запиту
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
// Виконання запиту
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
}
}
}
3. Асинхронні запити
OkHttp дозволяє виконувати запити у фоновому потоці за допомогою методу enqueue.
public void sendAsyncRequest(String url) {
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
System.out.println("Response: " + response.body().string());
}
}
});
}
4. Використання інтерцепторів
Інтерцептори дозволяють виконувати операції перед або після відправлення запиту, наприклад, додавання заголовків.
import okhttp3.*;
import java.io.IOException;
public class CustomClient {
public OkHttpClient getClientWithInterceptor() {
return new OkHttpClient.Builder()
.addInterceptor(chain -> {
Request request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer YOUR_TOKEN")
.build();
return chain.proceed(request);
})
.build();
}
}
Кешування
OkHttp підтримує автоматичне кешування відповідей для зменшення кількості запитів до сервера.
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import java.io.File;
public class CacheConfig {
public OkHttpClient getClientWithCache(File cacheDir) {
int cacheSize = 10 * 1024 * 1024; // 10 MB
Cache cache = new Cache(cacheDir, cacheSize);
return new OkHttpClient.Builder()
.cache(cache)
.build();
}
}
Робота з WebSocket
OkHttp спрощує роботу з WebSocket-з'єднаннями для додатків у реальному часі.
import okhttp3.*;
public class WebSocketExample {
private final OkHttpClient client = new OkHttpClient();
public void connectWebSocket(String url) {
Request request = new Request.Builder()
.url(url)
.build();
WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() {
@Override
public void onOpen(WebSocket webSocket, Response response) {
System.out.println("WebSocket Opened");
webSocket.send("Hello, Server!");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
System.out.println("Message: " + text);
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
System.out.println("WebSocket Closed: " + reason);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
t.printStackTrace();
}
});
}
}
Кращі практики
- Асинхронність: Використовуйте асинхронні запити для уникнення блокування головного потоку.
- Безпека: Завжди обробляйте виключення та перевіряйте відповідь сервера.
- Кешування: Використовуйте кеш для оптимізації мережевих ресурсів.
- Тестування: Використовуйте
MockWebServerдля створення тестів.
Висновок
OkHttp є одним із найкращих інструментів для роботи з мережею в Android. Він поєднує в собі простоту, потужність і розширюваність, що робить його ідеальним вибором як для невеликих, так і для великих проектів.