HTTP-методы

Разбираем HTTP-методы: GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD

Введение

HTTP (HyperText Transfer Protocol) - это основа веба, позволяющая взаимодействовать между клиентом (браузер, API) и сервером. Каждый HTTP-запрос использует один из методов, определяющих тип операции. В этой статье рассмотрим основные методы HTTP, их свойства, идемпотентность, использование и разберем примеры.


1. GET (идемпотентный, безопасный)

Назначение: Получение данных с сервера без изменения его состояния.

Свойства:

  • Идемпотентный - многократные вызовы не изменяют состояние сервера.
  • Безопасный - не модифицирует данные.
  • Может кэшироваться браузерами и прокси-серверами.

Пример запроса:

GET /users/1 HTTP/1.1
Host: example.com

Ответ сервера:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "name": "Orkhan"
}

2. POST (неидемпотентный, изменяет данные)

Назначение: Используется для создания нового ресурса на сервере.

Свойства:

  • Неидемпотентный - повторные вызовы могут создавать дубликаты.
  • Изменяет данные на сервере.
  • Чаще всего используется в API, формах и RESTful-сервисах.

Пример запроса:

POST /users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Orkhan"
}

Ответ сервера:

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 101,
  "name": "Orkhan"
}

3. PUT (идемпотентный, обновляет ресурс)

Назначение: Полное обновление ресурса или его создание, если он отсутствует.

Свойства:

  • Идемпотентный - повторные вызовы дают одинаковый результат.
  • Заменяет существующий ресурс новыми данными.

Пример запроса:

PUT /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "id": 1,
  "name": "Orkhan Updated"
}

Ответ сервера:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "name": "Orkhan Updated"
}

4. PATCH (неидемпотентный, частичное обновление)

Назначение: Частичное обновление ресурса.

Свойства:

  • Неидемпотентный - может давать разные результаты при повторных вызовах.
  • Обновляет только указанные поля.

Пример запроса:

PATCH /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Orkhan Patched"
}

Ответ сервера:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "name": "Orkhan Patched"
}

5. DELETE (идемпотентный, удаляет ресурс)

Назначение: Удаление ресурса с сервера.

Свойства:

  • Идемпотентный - повторные вызовы не изменяют состояние сервера.
  • Может возвращать 204 No Content или 404 Not Found.

Пример запроса:

DELETE /users/1 HTTP/1.1
Host: example.com

Ответ сервера:

HTTP/1.1 204 No Content

6. OPTIONS (информация о доступных методах)

Назначение: Запрос списка доступных HTTP-методов для ресурса.

Пример запроса:

OPTIONS /users HTTP/1.1
Host: example.com

Ответ сервера:

HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS

Используется в CORS-запросах и API-документации.


7. HEAD (как GET, но без тела ответа)

Назначение: Позволяет получить только заголовки ответа.

Используется для:

  • Проверки существования ресурса.
  • Оптимизации запросов.
  • Кэширования.

Пример запроса:

HEAD /images/logo.png HTTP/1.1
Host: example.com

Ответ сервера:

HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 58432
Last-Modified: Wed, 31 Jan 2024 12:45:00 GMT

Сравнительная таблица HTTP-методов

Метод Идемпотентный? Изменяет сервер? Описание
GET ✅ Да ❌ Нет Получение данных
POST ❌ Нет ✅ Да Создание нового ресурса
PUT ✅ Да ✅ Да Полное обновление ресурса
PATCH ❌ Нет ✅ Да Частичное обновление
DELETE ✅ Да ✅ Да Удаление ресурса
OPTIONS ✅ Да ❌ Нет Запрос доступных методов
HEAD ✅ Да ❌ Нет Запрос только заголовков

Заключение

Разбирая HTTP-методы, можно эффективно строить API и понимать принципы взаимодействия клиент-сервер. GET и HEAD используются для запроса данных, POST создаёт новые ресурсы, PUT и PATCH обновляют, DELETE удаляет, а OPTIONS помогает определить доступные методы. Эти знания важны как для веб-разработчиков, так и для интеграции API и построения RESTful сервисов.

Recent blogs
Структурные паттерны в программировании

Структурные паттерны в программировании

Порождающие паттерны в программировании

Порождающие паттерны в программировании

Генераторы и итераторы в PHP

Генераторы и итераторы в PHP

Объектно-ориентированное программирование в PHP

Объектно-ориентированное программирование в PHP

Структуры данных в PHP

Структуры данных в PHP