Ответ
Формат запроса в веб-приложении определяет структуру и способ передачи данных от клиента (браузера, мобильного приложения) к серверу. Он состоит из нескольких взаимосвязанных частей:
-
HTTP-метод (Verb): Определяет намерение операции.
GET— получение ресурса. Параметры передаются в URL (query string).POST— создание ресурса или отправка данных. Данные передаются в теле запроса.PUT/PATCH— полное или частичное обновление ресурса.DELETE— удаление ресурса.
-
Заголовки (Headers): Мета-информация. Ключевой для формата —
Content-Type.application/x-www-form-urlencoded— стандартные HTML-формы.multipart/form-data— формы с загрузкой файлов.application/json— обмен данными в формате JSON (стандарт для REST API).application/xml/text/xml— обмен в формате XML.
-
Тело запроса (Body): Содержит сами данные в формате, указанном в
Content-Type.
Пример POST-запроса с JSON и обработка на PHP:
// Клиентский код (JavaScript)
fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
},
body: JSON.stringify({
name: 'Alice',
email: 'alice@example.com',
active: true
})
});
// Обработка на сервере (PHP)
// 1. Проверяем метод и заголовок
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405); // Method Not Allowed
exit;
}
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
if (stripos($contentType, 'application/json') === false) {
http_response_code(415); // Unsupported Media Type
echo json_encode(['error' => 'Expecting JSON data']);
exit;
}
// 2. Получаем и декодируем тело запроса
$jsonInput = file_get_contents('php://input');
$data = json_decode($jsonInput, true); // Преобразуем в ассоциативный массив
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400); // Bad Request
echo json_encode(['error' => 'Invalid JSON']);
exit;
}
// 3. Используем данные (валидация, сохранение в БД и т.д.)
// $data['name'], $data['email'], $data['active']
Популярные архитектурные стили, определяющие форматы запросов и ответов: REST (на основе HTTP-методов и ресурсов), GraphQL (единая endpoint, гибкий язык запросов), gRPC (бинарный протокол на основе HTTP/2).
Ответ 18+ 🔞
Давай разберём, как эти ваши запросы в веб-приложениях работают, а то у некоторых тут волнение ебать, а понимания — ноль. Представь, что твой браузер — это такой наглый курьер, который прибегает к серверу и орет ему в лицо, чего он хочет. А формат запроса — это как раз инструкция, как правильно орать, чтобы тебя поняли, а не послали нахуй с ошибкой 400 Bad Request.
Вот из чего эта инструкция состоит, ёпта:
-
HTTP-метод (или Глагол). Это базовый крик, который определяет, что ты вообще пришел делать.
GET— это как прийти и сказать: «Дай!». Параметры обычно тыкают прямо в адресную строку, как записку в руку.POST— это уже: «На, держи, создай что-нибудь из этого!». Данные тут передаются в теле, то есть курьер достает их из сумки.PUT/PATCH— «Эй, переделай вот эту штуку!» Полностью или только кусочек.DELETE— самый простой и радикальный: «Удали это нахуй».
-
Заголовки (Headers). Это такая дополнительная мета-инфа, шепотом на ушко. Самый главный для нас —
Content-Type. Он говорит серверу: «Слушай, чувак, данные в теле у меня вот в таком формате, не охуей, когда будешь читать».application/x-www-form-urlencoded— старые добрые HTML-формы, как будто на дворе 2002-й год.multipart/form-data— когда вместе с текстом ты пытаешься запихнуть в запрос файл (картинку, документ). Это уже посерьёзнее.application/json— святое писание для современных REST API. Всё структурированно, красиво, машиночитаемо.application/xml— ну, это для любителей страдать хернёй и писать в десять раз больше тегов, чем нужно.
-
Тело запроса (Body). Ну, собственно, сами данные, которые ты передаёшь. То, что лежит в той самой сумке у курьера. Формат тела должен строго совпадать с тем, что ты объявил в
Content-Type, иначе сервер просто обосрётся и ничего не поймёт.
Вот смотри, как это выглядит вживую. Пример, когда фронтенд шлёт JSON, а бэкенд на PHP его пытается принять, не сломавшись:
// Это фронтенд (например, JavaScript) делает запрос
fetch('https://api.example.com/users', {
method: 'POST', // Кричим "СОЗДАЙ!"
headers: { // Шепчем на ушко
'Content-Type': 'application/json', // "Данные в теле — JSON, чувак!"
'Authorization': 'Bearer ' + token // "Я свой, вот пропуск"
},
body: JSON.stringify({ // А вот и сама сумка с данными
name: 'Alice',
email: 'alice@example.com',
active: true
})
});
// А это уже серверная сторона (PHP) пытается это всё осмыслить
// 1. Первым делом проверяем, а тот ли метод к нам приперся
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405); // Method Not Allowed - "Мы так не работаем!"
exit;
}
// 2. Смотрим, а тот ли формат данных нам суют
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
if (stripos($contentType, 'application/json') === false) {
http_response_code(415); // Unsupported Media Type - "Чё это за хрень? Ждали JSON!"
echo json_encode(['error' => 'Expecting JSON data']);
exit;
}
// 3. Если всё ок, вытаскиваем данные из "тела" запроса
$jsonInput = file_get_contents('php://input'); // Достаём из сумки непонятную бумажку
$data = json_decode($jsonInput, true); // Пытаемся расшифровать её как JSON
// 4. Если расшифровать не вышло — кричим, что клиент идиот
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400); // Bad Request - "Ты мне какую-то хуйню прислал, это не JSON!"
echo json_encode(['error' => 'Invalid JSON']);
exit;
}
// 5. Ура! Если дошли сюда, то в $data лежит нормальный массив с данными.
// Теперь можно их проверять, пихать в базу и т.д.
// $data['name'], $data['email'], $data['active']
А вообще, есть целые архитектурные стили, которые диктуют, как эти запросы должны выглядеть. REST — это классика, где всё крутится вокруг ресурсов и HTTP-методов. GraphQL — это такой хитрожопый подход, где вместо кучи разных endpoint'ов есть один, но ты можешь запросить у него ровно то, что тебе нужно, целым специальным языком. gRPC — это вообще тёмная магия, бинарный протокол поверх HTTP/2, быстрый, но там уже своя каша. В общем, выбирай, что душе угодно, главное — не путай GET с POST, а то будет вам хиросима.