← Назад к вопросам
В чем разница между запросами GET и PUT?
1.7 Middle🔥 181 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между запросами GET и PUT
GET и PUT — это два разных HTTP-методов с совершенно разными назначениями. Если GET предназначен для получения данных, то PUT — для изменения существующих ресурсов.
GET запрос
GET — это HTTP-метод для получения данных с сервера. Он безопасный и идемпотентный.
Характеристики
- Назначение: Получить данные (не изменять)
- Тело запроса: Нет (пусто)
- Параметры: Передаются в URL (query string)
- Кэширование: Браузер кэширует по умолчанию
- История браузера: Сохраняется
- Безопасность: Данные видны в URL (не использовать для чувствительных данных)
- Идемпотентность: Да (несколько одинаковых запросов дают один результат)
Примеры
// GET запрос в JavaScript
fetch('/api/users/123')
.then(res => res.json())
.then(data => console.log(data));
// URL с параметрами
fetch('/api/users?page=1&limit=10&sort=name')
.then(res => res.json())
.then(data => console.log(data));
<!-- GET запрос в HTML форме -->
<form method="GET" action="/search">
<input type="text" name="q" placeholder="Search">
<button type="submit">Search</button>
</form>
<!-- Отправит: /search?q=javascript -->
Когда использовать
- Получение списка пользователей
- Получение профиля пользователя
- Поиск по параметрам
- Фильтрация данных
- Любые операции чтения (read-only)
PUT запрос
PUT — это HTTP-метод для полного обновления существующего ресурса. Он заменяет весь ресурс на сервере.
Характеристики
- Назначение: Полностью заменить ресурс
- Тело запроса: Обязательно (JSON, XML, форма)
- Параметры: В теле запроса
- Кэширование: Обычно не кэшируется
- История браузера: Не сохраняется
- Безопасность: Данные в теле запроса (безопаснее, чем URL)
- Идемпотентность: Да (несколько одинаковых PUT запросов дают одинаковый результат)
Примеры
// PUT запрос для полного обновления пользователя
fetch('/api/users/123', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'John Doe',
email: 'john@example.com',
age: 30,
phone: '+1234567890',
})
})
.then(res => res.json())
.then(data => console.log('Updated:', data));
<!-- PUT запрос в HTML форме (нужен JavaScript) -->
<form id="userForm">
<input type="text" name="name" value="John">
<input type="email" name="email" value="john@example.com">
<button type="submit">Update</button>
</form>
<script>
document.getElementById('userForm').addEventListener('submit', (e) => {
e.preventDefault();
const formData = new FormData(e.target);
const data = Object.fromEntries(formData);
fetch('/api/users/123', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
});
</script>
Когда использовать
- Полное обновление профиля пользователя
- Замена всего содержимого документа
- Обновление всех полей ресурса
- Операции, которые требуют полной замены данных
GET vs PUT: Детальное сравнение
| Параметр | GET | PUT |
|---|---|---|
| Назначение | Получить данные | Заменить ресурс |
| Изменяет данные | Нет | Да |
| Тело запроса | Нет | Обязательно |
| Кэширование | Да | Нет |
| Безопасность | Низкая (видны в URL) | Выше (в теле) |
| Идемпотентность | Да | Да |
| История браузера | Сохраняется | Не сохраняется |
| Может иметь side effects | Нет | Нет (идемпотентен) |
Важный нюанс: PUT vs PATCH
Часто путают PUT и PATCH. Вот разница:
// PUT — полное обновление (замена всех полей)
fetch('/api/users/123', {
method: 'PUT',
body: JSON.stringify({
name: 'John',
email: 'john@example.com',
age: 30,
// Все поля должны быть здесь!
})
});
// PATCH — частичное обновление (только изменённые поля)
fetch('/api/users/123', {
method: 'PATCH',
body: JSON.stringify({
email: 'newemail@example.com',
// Остальные поля не меняются
})
});
Практический пример: Редактирование профиля
// Получить текущие данные пользователя (GET)
fetch('/api/users/123')
.then(res => res.json())
.then(user => {
// Пользователь заполняет форму, меняет email
user.email = 'newemail@example.com';
// Отправить ВСЕ данные обратно (PUT)
return fetch('/api/users/123', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(user)
});
})
.then(res => res.json())
.then(updated => console.log('Profile updated:', updated));
REST API Best Practices
// ============ ПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ ============
// GET — только для чтения
GET /api/users // Получить всех пользователей
GET /api/users/123 // Получить пользователя с ID 123
GET /api/users?role=admin // Получить администраторов
// POST — создание нового ресурса
POST /api/users // Создать нового пользователя
// PUT — полное обновление существующего ресурса
PUT /api/users/123 // Полностью заменить пользователя с ID 123
// PATCH — частичное обновление
PATCH /api/users/123 // Обновить только некоторые поля
// DELETE — удаление ресурса
DELETE /api/users/123 // Удалить пользователя
Вывод
- GET — для получения данных, безопасен, идемпотентен
- PUT — для полной замены ресурса, содержит полные данные
- GET передаёт параметры в URL, PUT в теле запроса
- GET кэшируется, PUT обычно нет
- PUT требует отправки ВСЕ полей, для частичных обновлений используйте PATCH