← Назад к вопросам
В чем разница между GET, POST, PATCH, DELETE и UPDATE?
1.7 Middle🔥 131 комментариев
#REST API и микросервисы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Разница между HTTP методами: GET, POST, PATCH, PUT, DELETE
Краткая таблица
| Метод | Назначение | Идемпотентный | Безопасный | Кэшируется | Body |
|---|---|---|---|---|---|
| GET | Получение данных | Да | Да | Да | Нет |
| POST | Создание ресурса | Нет | Нет | Нет | Да |
| PUT | Замена всего ресурса | Да | Нет | Нет | Да |
| PATCH | Частичное обновление | Нет | Нет | Нет | Да |
| DELETE | Удаление ресурса | Да | Нет | Нет | Нет |
Детальное описание
GET — Получение данных
Получает информацию с сервера без её изменения.
Характеристики:
- Безопасный: не изменяет состояние сервера
- Идемпотентный: множественные запросы = один запрос
- Кэшируется: браузер может кэшировать результат
- Body: нет (данные в URL query параметрах)
- Видимость: параметры в URL (видны в истории)
Пример:
// GET /api/users/123
GET /users/123 HTTP/1.1
Host: api.example.com
// Response: 200 OK {id: 123, name: "John"}
POST — Создание ресурса
Создаёт новый ресурс на сервере.
Характеристики:
- НЕ безопасный: создаёт новый ресурс
- НЕ идемпотентный: каждый запрос создаёт новый ресурс
- НЕ кэшируется: обычно
- Body: обязателен (данные в теле запроса)
- Видимость: данные в body (скрыты от истории)
Пример:
// POST /api/users
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"name": "John", "email": "john@example.com"}
// Response: 201 Created
{"id": 124, "name": "John", "email": "john@example.com"}
PUT — Полная замена ресурса
Заменяет весь ресурс новыми данными.
Характеристики:
- НЕ безопасный: изменяет ресурс
- Идемпотентный: многократный PUT одних данных = один PUT
- Body: обязателен (полные данные ресурса)
- Различие от POST: PUT идемпотентен, POST нет
Пример:
// PUT /api/users/123
PUT /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"name": "Jane", "email": "jane@example.com", "age": 30}
// Весь ресурс заменяется на новый
// Response: 200 OK
{"id": 123, "name": "Jane", "email": "jane@example.com", "age": 30}
PATCH — Частичное обновление
Обновляет только указанные поля ресурса.
Характеристики:
- НЕ безопасный: изменяет ресурс
- НЕ идемпотентный (обычно): зависит от реализации
- Body: обязателен (только изменяемые поля)
- Различие от PUT: PATCH изменяет частично, PUT полностью
Пример:
// PATCH /api/users/123
PATCH /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
{"name": "Jane"} // Только одно поле!
// Response: 200 OK
{"id": 123, "name": "Jane", "email": "john@example.com"} // Email остался
DELETE — Удаление ресурса
Удаляет ресурс с сервера.
Характеристики:
- НЕ безопасный: удаляет ресурс
- Идемпотентный: множественные DELETE одного = один DELETE
- Body: обычно нет
- Response: 204 No Content или 200 OK
Пример:
// DELETE /api/users/123
DELETE /users/123 HTTP/1.1
Host: api.example.com
// Response: 204 No Content
Практические примеры на Spring Boot
@RestController
@RequestMapping("/api/users")
public class UserController {
// GET - получение
@GetMapping("/{id}")
public UserDTO getUser(@PathVariable Long id) {
return userService.findById(id);
}
// POST - создание
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public UserDTO createUser(@RequestBody CreateUserRequest request) {
return userService.create(request);
}
// PUT - полная замена
@PutMapping("/{id}")
public UserDTO updateUserFull(
@PathVariable Long id,
@RequestBody UserDTO dto) {
return userService.updateFull(id, dto);
}
// PATCH - частичное обновление
@PatchMapping("/{id}")
public UserDTO updateUserPartial(
@PathVariable Long id,
@RequestBody Map<String, Object> updates) {
return userService.updatePartial(id, updates);
}
// DELETE - удаление
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
Ключевые отличия
- GET vs POST: GET безопасен и идемпотентен, POST нет
- PUT vs PATCH: PUT заменяет весь объект, PATCH только часть
- PUT vs POST: PUT идемпотентен (повторяем без проблем), POST создаёт новый при каждом вызове
- DELETE vs PATCH: DELETE удаляет, PATCH изменяет
Выбор правильного метода влияет на семантику API, безопасность, производительность кэширования и предсказуемость поведения.