Что такое payload в HTTP-запросе?

Ответ

Payload (полезная нагрузка) — это фактические данные, передаваемые в теле HTTP-запроса или ответа. В отличие от заголовков (headers), которые содержат метаинформацию, payload несёт основное содержимое, предназначенное для обработки сервером или клиентом.

Где находится payload? Метод HTTP Расположение payload
GET, HEAD, DELETE Обычно отсутствует. Данные передаются через параметры URL (query string).
POST, PUT, PATCH В теле запроса (body). Форматы: JSON, XML, form-data, plain text.
Ответ сервера (любой метод) В теле ответа. Чаще всего JSON или HTML.

Примеры payload:

  • POST-запрос на создание пользователя (JSON):
    {
      "username": "johndoe",
      "email": "john@example.com",
      "active": true
    }
  • Ответ сервера на успешный запрос:
    {
      "status": "success",
      "data": {
        "userId": 123,
        "createdAt": "2023-10-01T12:00:00Z"
      }
    }

Важно для тестирования API: Проверять валидность, структуру и содержимое payload как в запросах, так и в ответах.

Ответ 18+ 🔞

Давай разберёмся, что это за «полезная нагрузка» такая, а то термин звучит, будто грузовик с кирпичами. На самом деле всё проще, но без этого нихуя не работает.

Payload — это, грубо говоря, сама суть, которую ты тащишь в запросе или получаешь в ответе. Не всякая ерунда вроде заголовков (headers), где написано, откуда и куда, а именно то, ради чего всё затевалось. Данные, блядь. Контент.

Где эта самая нагрузка прячется? Смотри, как вор на шмонёре:

Метод HTTP Где искать payload
GET, HEAD, DELETE Обычно его тут нет, ваще. Всё, что нужно, цепляют к самому URL, как гирлянды на ёлку (query string).
POST, PUT, PATCH А вот тут-то он и сидит, в самом теле запроса (body). Запихнут туда в виде JSON, XML или ещё какой хуйни.
Ответ сервера (неважно, что спрашивали) И в ответе он тоже в теле. Чаще всего тебе прилетает JSON, но может и HTML, если серверу захотелось постарому.

Примеры, чтобы совсем ясно стало:

  • Допустим, ты создаёшь пользователя (POST-запрос в JSON):

    {
      "username": "johndoe",
      "email": "john@example.com",
      "active": true
    }

    Вот этот весь блок — и есть payload. Сука, полезная нагрузка. Без неё серверу прилетает пустой запрос, и он такой: «Чё?».

  • А вот ответ сервера, если всё прошло не в пизду:

    {
      "status": "success",
      "data": {
        "userId": 123,
        "createdAt": "2023-10-01T12:00:00Z"
      }
    }

    И это — payload ответа. Всё, что тебе нужно, лежит внутри data. Всё остальное — обёртка, сервировка.

Что важно, особенно когда API тестируешь? Смотреть на эту самую нагрузку, как ястреб. Валидность, структура, содержимое — всё должно быть на месте. И в том, что отправляешь, и в том, что получаешь. А то отправишь хуйню, а потом удивляешься, почему в ответе "status": "error", "message": "ты идиот".