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

В чем разница между 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);
    }
}

Ключевые отличия

  1. GET vs POST: GET безопасен и идемпотентен, POST нет
  2. PUT vs PATCH: PUT заменяет весь объект, PATCH только часть
  3. PUT vs POST: PUT идемпотентен (повторяем без проблем), POST создаёт новый при каждом вызове
  4. DELETE vs PATCH: DELETE удаляет, PATCH изменяет

Выбор правильного метода влияет на семантику API, безопасность, производительность кэширования и предсказуемость поведения.

В чем разница между GET, POST, PATCH, DELETE и UPDATE? | PrepBro