Что такое PATCH-запрос и как его выполнить во Flutter?

«Что такое PATCH-запрос и как его выполнить во Flutter?» — вопрос из категории Сети, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PATCH — это HTTP-метод для частичного обновления ресурса на сервере. В отличие от PUT, который заменяет ресурс целиком, PATCH отправляет только изменяемые поля.

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

Пример выполнения с пакетом http:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> updateUserProfile(int userId, String newName) async {
  final url = Uri.parse('https://api.example.com/users/$userId');
  final headers = {'Content-Type': 'application/json'};
  final body = jsonEncode({'name': newName}); // Отправляем только поле name

  final response = await http.patch(url, headers: headers, body: body);

  if (response.statusCode == 200) {
    print('Профиль успешно обновлён');
  } else {
    throw Exception('Ошибка обновления: ${response.statusCode}');
  }
}

Пример с более популярным пакетом dio:

import 'package:dio/dio.dart';

Future<void> updateUserWithDio(int userId, Map<String, dynamic> patchData) async {
  final dio = Dio();
  final response = await dio.patch(
    'https://api.example.com/users/$userId',
    data: patchData, // Например: {'email': 'new@email.com', 'settings': {'theme': 'dark'}}
  );
  print('Данные обновлены: ${response.data}');
}

Ключевые моменты:

  • Сервер должен поддерживать логику обработки частичных обновлений.
  • Успешные коды ответа: 200 (OK) с телом или 204 (No Content).
  • Всегда обрабатывайте возможные ошибки сети и статусы 4xx/5xx.