Ответ
Это коды успешного выполнения (2xx), но с разной семантикой.
- 200 OK — стандартный ответ на успешный запрос. Сервер возвращает запрошенные данные в теле ответа. Используется для GET, а также для PUT или POST, когда нужно вернуть результат.
- 201 Created — ресурс успешно создан в результате запроса (обычно POST или PUT). В заголовках ответа должен присутствовать
Locationс URI нового ресурса. Тело ответа может содержать данные созданного объекта. - 204 No Content — запрос выполнен успешно, но серверу нечего вернуть в теле ответа. Используется для операций, где возврат данных не требуется или не имеет смысла (например, DELETE, или POST/PUT, которые только обновляют состояние).
Практические примеры:
# 200 OK — получение данных
GET /api/users/1 HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{"id": 1, "name": "Alice"}
# 201 Created — создание ресурса
POST /api/users HTTP/1.1
Content-Type: application/json
{"name": "Bob"}
HTTP/1.1 201 Created
Location: /api/users/2
Content-Type: application/json
{"id": 2, "name": "Bob"}
# 204 No Content — успешное удаление
DELETE /api/users/2 HTTP/1.1
HTTP/1.1 204 No Content Ответ 18+ 🔞
А, ну вот, опять про эти цифры, блядь, которые все путают! Слушай сюда, сейчас разложу по полочкам, как эти статусы на самом деле работают, а то народ безмозглый, блядь, вечно в них путается.
Вот есть у нас коды успеха, 2xx всякие. Вроде всё хорошо, запрос прошёл, но, сука, нюансы-то какие! Как будто тебе говорят: «Всё окей», но одним просто кивают, другим дают конфетку, а третьим и кивать-то лень.
200 OK — это как стандартное «ну да, чё, всё норм». Запрос отработал, и сервер тебе в ответ что-то плюнул в теле. Запросил пользователя — получил его данные. Отправил что-то через POST или PUT и хочешь увидеть, что там получилось — тоже 200. Базовый, понятный, скучный, как день сурка.
201 Created — а вот это уже интереснее, ёпта! Это когда ты не просто что-то сделал, а создал новую сущность. Обычно после POST. Сервер такой: «Опа, мужик, молодец, родил!». И он обязан, блядь, в заголовках ответа указать Location — адрес, где теперь этот новорождённый ресурс лежит. Может ещё и в теле ответа его данные отправить, типа «держи, полюбуйся на своё творение».
204 No Content — а это, блядь, высший пилотаж минимализма. Запрос выполнен, всё заебись, но сервер тебе ни хуя в ответ не присылает. Вообще. Пустое тело. Используется, когда возвращать просто нечего. Удалил запись (DELETE) — что тебе возвращать-то, пустоту? Или отправил команду на обновление, и тебе не нужен результат — вот тебе 204, иди нахуй, всё сделано. Экономят трафик, сука.
Практические примеры, чтобы не быть пиздабородатым теоретиком:
# 200 OK — получил данные, как и просил
GET /api/users/1 HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{"id": 1, "name": "Alice"}
# 201 Created — создал нового юзера, вот тебе его адрес и данные
POST /api/users HTTP/1.1
Content-Type: application/json
{"name": "Bob"}
HTTP/1.1 201 Created
Location: /api/users/2
Content-Type: application/json
{"id": 2, "name": "Bob"}
# 204 No Content — удалил и пошёл нахуй, без лишних слов
DELETE /api/users/2 HTTP/1.1
HTTP/1.1 204 No Content
Вот и вся разница, блядь. Главное — не отправлять 204, когда клиент ждёт данных, а то он тебе ебальник нахуй свернёт. И наоборот, не городить 201 с Location, если ничего не создавал. А то будешь выглядеть как тот самый Герасим, который только «Муму» мычать может.