← Назад к вопросам

Какие знаешь HTTP-методы?

1.3 Junior🔥 241 комментариев
#API и веб-протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP-методы: основные и дополнительные

HTTP-методы (часто называемые HTTP-глаголами) — это набор стандартных операций, которые клиент может запросить у сервера для взаимодействия с ресурсами. В основе архитектуры REST лежат именно эти методы, определяющие семантику запроса. С точки зрения PHP Backend-разработчика, глубокое понимание методов критически важно для проектирования корректных, безопасных и эффективных API.

Основные (наиболее используемые) методы:

  • GETЗапрос данных с сервера.
    *   **Семантика**: "Получить" (идемпотентный и безопасный).
    *   **Использование в API/REST**: Получение ресурса или коллекции ресурсов. Параметры передаются в URL (query string).
    *   **Пример в PHP (обработка запроса)**:
    ```php
    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        $userId = $_GET['id'] ?? null;
        // Логика получения данных пользователя с ID = $userId из БД
        echo json_encode(['user' => $userData]);
    }
    ```
  • POSTСоздание новых данных на сервере.
    *   **Семантика**: "Создать" (неидемпотентный, небезопасный).
    *   **Использование**: Создание нового ресурса в коллекции (например, нового пользователя). Данные обычно передаются в теле запроса (body).
    *   **Пример**:
    ```php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $inputData = json_decode(file_get_contents('php://input'), true);
        // Валидация $inputData, затем INSERT в базу данных
        $newId = $db->insert($inputData);
        http_response_code(201); // Created
        echo json_encode(['id' => $newId]);
    }
    ```
  • PUTПолное обновление ресурса.
    *   **Семантика**: "Обновить/Заменить" (идемпотентный). Клиент отправляет полное представление ресурса, заменяя им существующее.
    *   **Использование**: Обновление ресурса по известному идентификатору. Если ресурс не существует, может создаваться (зависит от реализации).
    *   **Пример**:
    ```php
    // PUT /api/users/123
    // Body: {"name": "Новое Имя", "email": "new@mail.com"}
    if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
        $userId = getUserIdFromUri(); // Извлечь ID из URI
        $updateData = json_decode(file_get_contents('php://input'), true);
        // Полная замена записи в БД для userId
    }
    ```
  • PATCHЧастичное обновление ресурса.
    *   **Семантика**: "Частично изменить" (идемпотентный). Клиент отправляет только изменяемые поля.
    *   **Использование**: Точечные обновления (например, смена статуса заказа). Более эффективен, чем PUT, когда ресурс большой.
    *   **Важно**: Формат изменений может специфицироваться (например, JSON Patch, JSON Merge Patch).

  • DELETEУдаление ресурса.
    *   **Семантика**: "Удалить" (идемпотентный).
    *   **Использование**: Удаление ресурса по идентификатору.
    *   **Пример**:
    ```php
    if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
        $userId = getUserIdFromUri();
        // DELETE FROM users WHERE id = $userId
        http_response_code(204); // No Content (успешное удаление)
    }
    ```
  • HEAD — Аналогичен GET, но сервер возвращает только заголовки ответа, без тела. Используется для проверки существования ресурса, его метаданных (например, Last-Modified) без скачивания всего содержимого.

  • OPTIONSЗапрос информации о доступных методах и возможностях для данного ресурса (сервера). Крайне важен для CORS (Cross-Origin Resource Sharing), где браузер отправляет предварительный (preflight) запрос OPTIONS для проверки разрешенных методов и заголовков.

    if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
        header('Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: Content-Type, Authorization');
        http_response_code(200);
        exit;
    }
    

Дополнительные (реже используемые) методы:

  • TRACE — Применяется для диагностики. Сервер возвращает клиенту точную копию полученного запроса. В целях безопасности (риск раскрытия информации) обычно отключается.
  • CONNECT — Используется для установления туннеля (туннелирования) через прокси-сервер, например, для SSL/TLS соединений (HTTPS).

Ключевые принципы для разработчика:

  1. Идемпотентность: Повторный идентичный запрос (кроме POST) должен приводить к одинаковому состоянию сервера. PUT, DELETE, GET, HEAD, OPTIONS — идемпотентны.
  2. Безопасность: Методы (GET, HEAD, OPTIONS) считаются безопасными, так как не должны изменять состояние сервера.
  3. Кэшируемость: Ответы на GET и HEAD-запросы по умолчанию кэшируемы. POST и PATCH — обычно нет (но могут управляться заголовками Cache-Control).
  4. Семантика важнее: Реальное поведение на сервере должно соответствовать ожидаемой семантике метода. Нельзя удалять данные в ответ на GET-запрос, это нарушает контракт HTTP и вводит в заблуждение клиентов, прокси, кэши.

В современной PHP-разработке (Symfony, Laravel) роутинг часто привязан к HTTP-методам, что делает код чище и самодокументируемым:

// Laravel / Symfony пример маршрутов
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::put('/users/{id}', [UserController::class, 'update']);
Route::delete('/users/{id}', [UserController::class, 'destroy']);

Понимание и правильное применение HTTP-методов — фундамент для создания предсказуемых, масштабируемых RESTful API, которые легко интегрируются с клиентскими приложениями и сторонними сервисами.

Какие знаешь HTTP-методы? | PrepBro