Ответ
POST и PUT — это HTTP-методы с разной семантикой, определяемой стандартом REST.
POST (Создание)
Используется для создания нового ресурса, когда идентификатор (ID) неизвестен клиенту. Сервер генерирует ID и возвращает его в ответе.
- Неидемпотентный: Повторные идентичные запросы создадут новые ресурсы.
- Типичный статус ответа:
201 Createdс заголовкомLocation.
Пример (Spring Boot):
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userRepository.save(user);
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).body(savedUser);
}
PUT (Полное обновление/Создание)
Используется для полного обновления ресурса по известному URI. Если ресурс не существует, может создавать его с предоставленным ID (идемпотентное создание).
- Идемпотентный: Многократный повтор запроса даёт тот же результат.
- Требует передачи всего представления ресурса.
- Типичный статус ответа:
200 OKили204 No Content.
Пример (Spring Boot):
@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id); // Устанавливаем ID из пути
User updatedUser = userRepository.save(user); // Сохраняем (обновляем или создаем)
return ResponseEntity.ok(updatedUser);
}
| Ключевые отличия: | Аспект | POST | PUT |
|---|---|---|---|
| Семантика | Создание | Полное обновление (или создание с заданным ID) | |
| Идемпотентность | Нет | Да | |
| Идентификатор | Определяется сервером | Определяется клиентом (в URI) | |
| Ответ | 201 Created + Location |
200 OK / 204 No Content |
Ответ 18+ 🔞
А, слушай, про эти ваши HTTP-методы! Ну, классика же, блядь. POST и PUT — это как два брата, но один постоянно создаёт хуйню, а второй всё по полочкам раскладывает. Разберём, чтобы не путать, как мартышлюшка в зоопарке.
POST — это типа «роди, блядь, что-нибудь новое» Используется, когда ты приходишь на сервер и такой: «Слушай, я тут принёс какую-то хрень, но сам не знаю, куда её деть. Придумай ей место сам, а?». Сервер, сука, думает, генерит ID этой хрени и говорит: «Вот, держи, родил тебе сыночка, вот его адресок».
- Неидемпотентный — это значит, если ты десять раз нажмёшь F5, он десять раз родит одинаковых уродцев. Овердохуища мусора получится.
- Отвечает обычно:
201 Createdи тыкает пальцем в заголовокLocation— «вот, смотри, где твоё дитя лежит».
Пример (Spring Boot):
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userRepository.save(user);
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).body(savedUser);
}
PUT — это «замени всё, сука, на то, что я тебе даю»
А вот это уже серьёзный дядька. Ты приходишь с чётким адресом: «На вот, по этому пути (/users/123) положи вот этот объект. Если там уже что-то было — выкинь нахуй и положи моё. Если пусто — создай с этим ID». Всё, пиздец. Разговор короткий.
- Идемпотентный — можешь хоть сто раз слать, результат будет один. Как стучать головой в стену: хуй сломаешь, но стена не подвинется.
- Требует ВСЕГО — полумеры не катят, отдавай полное представление ресурса, жмот.
- Отвечает:
200 OK(вот, держи обновлённую хрень) или204 No Content(всё заебись, но я тебе ничего назад не отдам, иди нахуй).
Пример (Spring Boot):
@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id); // Устанавливаем ID из пути
User updatedUser = userRepository.save(user); // Сохраняем (обновляем или создаем)
return ResponseEntity.ok(updatedUser);
}
Короче, главные отличия, чтобы не быть пидарасом шерстяным:
| Что сравниваем | POST | PUT |
|---|---|---|
| Смысл | «Создай что-нибудь, я не знаю где» | «Положи вот это ИМЕННО СЮДА, замени всё» |
| Идемпотентность | Нет (рожает как кролик) | Да (как талдычит одно и то же) |
| Кто ID назначает | Сервер (он умный) | Клиент (ты сам, типа «я тут главный») |
| Ответ | 201 Created + адрес (Location) |
200 OK / 204 No Content (типа «сделано, отъебись») |
Вот и вся магия. Главное — не перепутай, а то вместо обновления пользователя начнёшь плодить их, как сука, и потом будешь думать, откуда у тебя в базе овердохуища одинаковых Вась.