← Назад к вопросам

Что такое PUT-запрос?

1.3 Junior🔥 201 комментариев
#Работа с сетью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое PUT-запрос?

PUT-запрос — это один из HTTP-методов, используемых для обновления существующих ресурсов на сервере. Это фундаментальный инструмент при работе с REST API, который каждый разработчик должен понимать.

Основные характеристики PUT

PUT отправляет данные на сервер для полного обновления ресурса. Ключевые особенности:

  • Полное обновление — заменяет весь ресурс целиком (не частичное обновление)
  • Требует ID — необходимо знать идентификатор обновляемого ресурса
  • Идемпотентность — повторный вызов с теми же данными дает тот же результат
  • Требует полное тело — должны быть переданы все поля ресурса

Отличие PUT от PATCH

Часто разработчики путают PUT и PATCH:

  • PUT: полное обновление (заменить весь объект)
  • PATCH: частичное обновление (изменить только нужные поля)
Оригинальный объект:
{"id": 1, "name": "John", "age": 30}

PUT (полное обновление):
{"id": 1, "name": "Jane", "age": 25}
Результат: {"id": 1, "name": "Jane", "age": 25}

PATCH (частичное обновление):
{"name": "Jane"}
Результат: {"id": 1, "name": "Jane", "age": 30}

Пример в Flutter

При работе с HTTP в Flutter используется пакет http или dio:

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

Future<void> updateUser(int userId, Map<String, dynamic> userData) async {
  final uri = Uri.parse('https://api.example.com/users/$userId');
  
  final response = await http.put(
    uri,
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode(userData),
  );
  
  if (response.statusCode == 200) {
    print('Пользователь обновлен');
  } else {
    print('Ошибка: ${response.statusCode}');
  }
}

await updateUser(1, {
  'name': 'John Doe',
  'email': 'john@example.com',
  'age': 30,
});

Вариант с Dio

Dio — более мощная библиотека для HTTP-запросов:

final dio = Dio();

Future<void> updateUserWithDio(int userId, Map<String, dynamic> userData) async {
  try {
    final response = await dio.put(
      'https://api.example.com/users/$userId',
      data: userData,
      options: Options(contentType: Headers.jsonContentType),
    );
    
    if (response.statusCode == 200) {
      print('Успешно обновлено: ${response.data}');
    }
  } on DioException catch (e) {
    print('Ошибка PUT: ${e.message}');
  }
}

Когда использовать PUT

  • Обновление профиля пользователя целиком
  • Замена конфигурации
  • Полное обновление данных сущности

Статус-коды для PUT

  • 200 OK — успешное обновление, ресурс возвращается
  • 204 No Content — успешное обновление без тела ответа
  • 400 Bad Request — ошибочные данные
  • 404 Not Found — ресурс не найден
  • 409 Conflict — конфликт при обновлении

Понимание PUT-запросов критично при разработке мобильных приложений, так как это основной способ синхронизации данных с бэкендом.