Из каких основных частей состоит HTTP-запрос в REST API?

Ответ

Типичный HTTP-запрос в REST API состоит из следующих обязательных и опциональных компонентов:

  1. HTTP-метод (Verb) — определяет операцию над ресурсом.

    • GET: получение данных.
    • POST: создание ресурса.
    • PUT/PATCH: полное/частичное обновление.
    • DELETE: удаление ресурса.
  2. URL (Endpoint/URI) — адрес целевого ресурса.

    • Пример: https://api.example.com/v1/users/456
  3. Заголовки (Headers) — метаданные запроса.

    • Content-Type: формат тела запроса (например, application/json).
    • Authorization: данные для аутентификации (например, Bearer <token>).
    • Accept: ожидаемый формат ответа.
  4. Тело запроса (Body) — данные, отправляемые на сервер (для POST, PUT, PATCH).

    {
      "name": "Alice",
      "email": "alice@example.com"
    }
  5. Параметры строки запроса (Query Parameters) — опциональные данные, добавляемые в URL после ?.

    • Пример: GET /api/users?role=admin&page=2

Полный пример запроса на создание пользователя:

POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

{
  "username": "johndoe",
  "active": true
}

Почему это важно для тестирования: Каждый компонент (метод, заголовки, тело, параметры) должен быть проверен на валидность, безопасность и соответствие спецификации API.

Ответ 18+ 🔞

Давай разберём эту штуку, как будто ты пытаешься объяснить её своему котану, который только вчера узнал, что интернет — это не только порно.

Смотри, типичный запрос к этим вашим REST API — это как отправить посылку, но вместо почтальона у тебя протокол HTTP, а вместо посылки — твои данные, которые ты хочешь куда-то засунуть или оттуда вытащить.

Вот из какого говна, прости господи, этот запрос слеплен:

  1. Метод (или Глагол, если ты любишь умные слова). Это твоё намерение, крик души. Что ты хочешь сделать?

    • GET — «Дай посмотреть!». Ты ничего не меняешь, просто смотришь. Как в витрину.
    • POST — «На, создай!». Ты приносишь новую сущность. «Вот, сервер, роди этого пользователя».
    • PUT/PATCH — «Исправь нахуй!». PUT — это «перепиши всё целиком», PATCH — «почини только то, что сломалось».
    • DELETE — «Удали нахуй!». Всё понятно. Безвозвратно, надеюсь.
  2. URL (или Эндпоинт, или Адрес). Это куда ты стучишься. Как адрес дома и квартиры.

    • https://api.какой-то-сервис.ру/v1/пользователи/456 — значит, мы лезем к пользователю с номером 456 в первой версии апи.
  3. Заголовки (Headers). Это как сопроводительная записка к посылке. Метаданные, ёпта.

    • Content-Type: application/json — «Эй, внутри лежит JSON, не удивляйся, когда распакуешь».
    • Authorization: Bearer <токен> — «Я свой, вот мой пропуск, не бей».
    • Accept: application/json — «И ответ мне, пожалуйста, в JSON, а не в формате «письмо счастья»».
  4. Тело запроса (Body). Это сама посылка. Лежит там, где данные. Для GET обычно пусто, а для POST/PUT — самое интересное.

    {
      "name": "Алиса",
      "email": "alice@example.com"
    }
  5. Параметры строки запроса (Query Parameters). Это когда ты кричишь адресату вслед, уже когда дверь открыл. «Эй, и принеси только админов, да со второй страницы!».

    • Видишь в URL ?role=admin&page=2 после знака вопроса? Вот это они и есть.

А теперь смотри, как это всё вместе выглядит в дикой природе, на примере создания какого-нибудь «джондоу»:

POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

{
  "username": "johndoe",
  "active": true
}

И нахуй это всё тестировать? А затем, чувак, что каждый этот кусок — потенциальная дыра, глупость или причина, по которой всё ебнется. Метод не тот указал — получишь пизды вместо данных. В заголовках хуйню написал — сервер тебя не поймёт и пошлёт нахуй. В теле JSON кривой отправил — опять пиздец. Параметры перепутал — получишь не то, что хотел. Тестирование — это чтобы проверить, что твой запрос не только доходит, но и делает ровно то, что задумано, и не открывает двери для всяких ебучих хакеров с их «инъекциями» и прочей пиздобратией.