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

Ответ

PUT — это идемпотентный HTTP-метод для полного обновления ресурса по указанному URI. Если ресурс существует, он заменяется; если нет — может быть создан (хотя это зависит от реализации API).

Ключевые характеристики:

  • Идемпотентность: Многократные одинаковые запросы дают тот же результат, что и один.
  • Полная замена: Обычно требует отправки полного представления ресурса, а не частичных данных.
  • Предсказуемый URI: URI обычно содержит идентификатор обновляемого ресурса (например, /users/123).

Пример на Dart с пакетом http:

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

Future<void> updateUserProfile(String userId, Map<String, dynamic> userData) async {
  final response = await http.put(
    Uri.parse('https://api.example.com/users/$userId'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode(userData),
  );

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

Типичные коды ответа:

  • 200 OK — успешное обновление
  • 201 Created — ресурс создан
  • 204 No Content — успешно, но без тела в ответе
  • 404 Not Found — ресурс для обновления не существует (если API не поддерживает создание через PUT)

Ответ 18+ 🔞

А, ну вот, опять про эти ваши HTTP-методы. Слушай, PUT — это как если ты пришёл в гости, увидел старый диван, и такой: «Нахуй этот диван, выкидываем, ставлю новый». Идемпотентный, ёпта! Это значит, что если ты десять раз подряд крикнешь «выкидываем диван, ставим новый» — результат будет один: будет стоять новый диван. Не одиннадцать новых диванов, а один. Вот и вся магия.

Ключевые фишки, бля:

  • Идемпотентность: Повторяй хоть сто раз — хуй с горы не сдвинется, ресурс будет в одном и том же конечном состоянии. Красота.
  • Полная замена, ёбана: Ты не можешь принести новую подушку и сказать «обнови только её». Нет, чувак. Ты тащишь ВЕСЬ новый диван. Все поля, даже если они не поменялись. Иначе — пизда рулю, получишь ошибку.
  • URI предсказуемый: Ты же знаешь, куда этот диван ставить? /users/123. Не просто «в комнату», а именно на это конкретное место. Иначе какой-нибудь 404 Not Found получишь — мол, нет тут такого угла для твоего дивана, иди нахуй.

Вот тебе пример на Dart, смотри:

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

Future<void> updateUserProfile(String userId, Map<String, dynamic> userData) async {
  final response = await http.put(
    Uri.parse('https://api.example.com/users/$userId'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode(userData),
  );

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

Смотри, что тут происходит: ты говоришь серверу — «на, блядь, полный набор данных пользователя userId, засунь его туда, где он должен быть». Если на том месте уже что-то было — затрется. Если было пусто — может, создастся, но это уже как повезёт, не все API такие добрые.

Коды ответов, на которые надо глаз положить:

  • 200 OK — всё чётко, диван обновили. Идемпотентность, ебать, работает.
  • 201 Created — охуенно! Дивана там не было, но мы его по твоей просьбе на пустое место поставили. Молодцы.
  • 204 No Content — тоже норм, обновили, но тебе в ответ даже «ок» писать лень, иди своей дорогой.
  • 404 Not Found — вот тут, бля, писец. Место, куда ты диван толкаешь, не существует. И создавать через PUT тут не разрешают. Иди нахуй, со своим диваном. Подозрение ебать чувствую, что ты URI кривой указал.

Короче, PUT — это сила, но сила, требующая ответственности. Неси весь ресурс, не ссы.