Что означает HTTP-статус 200?

Ответ

HTTP-статус 200 OK — это код состояния, означающий, что запрос клиента был успешно обработан сервером. Это стандартный ответ для успешных операций GET, PUT, PATCH и часто для POST (хотя для POST более семантически верен статус 201 Created).

Что он гарантирует и что нет:

  • Гарантирует: Сервер получил, понял и выполнил запрос.
  • Не гарантирует: Семантическую корректность или бизнес-логическую правильность возвращенных данных.

Пример успешного ответа на GET-запрос:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Mon, 01 Jan 2024 12:00:00 GMT

{
  "id": 42,
  "status": "active",
  "name": "Test User"
}

При тестировании API:

  1. Проверяйте, что запрос возвращает статус 200 при ожидаемом успешном сценарии.
  2. Всегда валидируйте тело ответа. Статус 200 может прийти с пустым телом или некорректными данными.
    // Пример проверки в тесте
    expect(response.status).toBe(200);
    expect(response.body).toHaveProperty('id');
    expect(response.body.name).toBe('Test User');

Статус 200 относится к классу кодов 2xx (Success), который сигнализирует об успешном выполнении запроса клиента.

Ответ 18+ 🔞

А, слушай, про эту цифру «200 ОК»! Это ж классика, блядь, как «Муму» у Тургенева, только в мире этих ваших интернетов. Представь себе: ты, такой Герасим от программирования, посылаешь свой запрос — «Мууу!», то есть «Дай мне данные, сука!». А сервер, этот здоровый немой чувак в дата-центре, молча делает своё дело и отвечает тебе: «Му-му, братан, всё чётко, держи».

Вот этот самый «всё чётко» и есть HTTP 200 OK. Сервер как бы говорит: «Я твой запрос получил, понял и, вроде как, выполнил. Не пизди мне тут».

Но вот в чём, блядь, парадокс и трагедия этого высокого протокола! Он гарантирует только одно: что сервер не сдох и не послал тебя нахуй с ошибкой. А что он там в ответе наворотил — это уже другой вопрос, ёпта.

  • Гарантирует: Да, запрос дошёл, обработан, и тебе что-то пришло. Не 404, не 500, не «иди нахуй».
  • НЕ гарантирует: Что в ответе не будет какой-то хуйни. Может прийти пустой объект, может прийти { "error": "всё плохо" }, но статус-то будет 200! Сервер выполнил запрос — выполнил, блядь, отправил тебе эту хрень. А то, что это хрень — это уже твои проблемы, чувак.

Вот смотри, как это выглядит вживую. Ты просишь пользователя, а тебе приходит:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Mon, 01 Jan 2024 12:00:00 GMT

{
  "id": 42,
  "status": "active",
  "name": "Test User"
}

Вроде красота, да? Всё на месте. Но это только в идеальном мире, а у нас, блядь, как всегда.

Поэтому запомни, как отче наш, когда тестируешь своё API:

  1. Первым делом, ебать, смотри, что статус 200. Это база. Если не 200 — всё, пиздец, пошёл разбираться, кто и где обосрался.
  2. А ВТОРОЕ, И ГЛАВНОЕ — ВАЛИДИРУЙ ТЕЛО ОТВЕТА, БЛЯДЬ! Не будь как тот Герасим, который только «Муму» и мычит. Ты должен заглянуть внутрь. А то получишь 200, а там { "user": null } или, того хуже, { "message": "Успешно! (данных нет)" }. Вот тогда и начнётся твоё личное «Муму... что же я, мудак, сделал?».
// Правильный подход, без максимализма
expect(response.status).toBe(200); // Окей, сервер не сдох
expect(response.body).toHaveProperty('id'); // А есть ли тут вообще что проверять?
expect(response.body.name).toBe('Test User'); // А то, что прислали, — это то, что я просил?

Короче, статус 200 — это как зелёный свет на светофоре. Он не гарантирует, что за поворотом тебя не ждёт яма размером с овердохуище или пизда бородавчатая в виде невалидных данных. Он просто говорит: «Едь, вроде можно». А дальше — твоя ответственность, чувак. В рот меня чих-пых, вот так вот.