Ответ
PUT используется для полной замены ресурса. Клиент должен отправить полное представление ресурса. Если какие-то поля не указаны, сервер интерпретирует это как их удаление.
PATCH применяется для частичного обновления ресурса. Клиент отправляет только те поля, которые нужно изменить.
Ключевые отличия:
- Идемпотентность: PUT — идемпотентен (многократный одинаковый запрос дает тот же результат). PATCH — не всегда идемпотентен.
- Семантика: PUT — «заменить». PATCH — «модифицировать».
Пример на Dart (пакет http):
import 'package:http/http.dart' as http;
import 'dart:convert';
// PUT: Полное обновление пользователя с id=1
Future<void> updateUserPut() async {
final response = await http.put(
Uri.parse('https://api.example.com/users/1'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'name': 'Alice',
'email': 'alice@example.com', // Все поля обязательны
}),
);
}
// PATCH: Частичное обновление только email
Future<void> updateUserPatch() async {
final response = await http.patch(
Uri.parse('https://api.example.com/users/1'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'email': 'new.alice@example.com', // Обновляем только email
}),
);
}
Выбор метода зависит от дизайна API. Для операций, похожих на «сохранить как», используйте PUT. Для исправления отдельных атрибутов — PATCH.