Методы HTTP и как с ними работать

Чтобы вы лучше поняли предназначение методов HTTP, я приведу аналогию с обычной жизнью.

Представим, что сервер — это городское управление с множеством подразделений, отделов, сотрудников.

Каждое подразделение отвечает за свою сферу: транспорт, здравоохранение, образование и т.д.

Каждый отдел занимается определёнными задачами и имеет свои правила работы.

Например, в подразделение транспорта есть отделы расписания автобусов, такси, грузоперевозок, авиаперевозок.

Каждый сотрудник умеет выполнять строго определённые действия.

Каждый сотрудник принимает запросы от граждан и выполняет определённые действия в зависимости от типа заявления.

Все запросы приходят секретарю, который смотрит на адрес и пометку и перенаправляет их в нужный отдел, определенному сотруднику.

Возможные метки на письмах: GET, POST, PATCH, DELETE.

Если мы хотим получить информацию — например, о расписании автобусов,
мы заполняем заявление с пометкой GET на адрес https://city.gov/transportation/bus-schedule

Это задание идет в подразделение транспорта, в отдел расписания автобусов сотруднику, который отвечает за метку GET – предоставление информации.


Если мы хотим внести новую информацию — подать заявление о новом маршруте автобуса, мы приносим заполненную форму с пометкой POST в отдел транспорта: https://city.gov/transportation/bus-schedule

Это задание идет в подразделение транспорта, в отдел расписания автобусов сотруднику, который отвечает за метку POST – создание новых маршрутов.


Если нужно обновить уже поданные данные — например, изменить расписание автобуса, мы отправляем запрос с пометкой PATCH на адрес https://city.gov/transportation/bus-schedule

Это задание идет в подразделение транспорта, в отдел расписания автобусов сотруднику, который отвечает за метку PATCH – обновление информации в расписании автобусов.


А если нужно удалить маршрут автобуса, который больше не нужен, мы отправляем запрос с пометкой DELETE на адрес https://city.gov/transportation/bus-schedule

Это задание идет в подразделение транспорта, в отдел расписания автобусов сотруднику, который отвечает за метку DELETE – удаление маршрутов автобусов.


Каждый из этих запросов может быть направлен в один и тот же отдел, но с разной целью.
И сервер понимает, что именно нужно сделать, по методу запроса.


Получается так, что метки (методы HTTP) GET, POST, PATCH, DELETE — это просто дополнительные свойства запроса, которые помогают серверу понять на какого исполнителя его направить, а дальше исполнитель сделает то что он может.

Метод подразумевает действие, но не гарантирует его

Может ли быть ситуация когда на сервере программисты сделали так что запрос на метод DELETE будет создавать новый документ или обновлять существующий?

Да, может. Но это будет не стандартное поведение и скорее всего приведёт к путанице.

Подразумевается, что название методов уже говорит о том, что именно будет происходить, но это не значит, что именно так и произойдет.

Как устроен сервер

Аналогично примеру с городским управлением, сервер — это система, которая принимает запросы и обрабатывает их.

На первом уровне находится маршрутизатор (router), который принимает запросы и определяет, куда их направить.

Он смотрит на адрес запроса и метод, чтобы понять, какой обработчик должен его выполнить.

Затем запрос передаётся в соответствующий обработчик (handler), который выполняет нужное действие: получает данные, обновляет их, удаляет или создаёт новые.

Обработчик ожидает получить запрос с определёнными данными и в определённом формате. Если запрос не соответствует ожиданиям, обработчик скорее всего не выполнит запрос корректно. Как будет вести себя обработчик зависит от того как его сделали программисты.

Для перенаправления нужен адрес и метод

Маршрутизатору нужен адрес запроса и метод, чтобы понять, куда направить запрос.

Ему не нужно знать, что именно будет делать обработчик — он просто перенаправляет запрос в нужное место.

Методы HTTP

Самые распространённые методы:

  • GET — получить данные.
    Используется, когда нужно просто что-то запросить, например: страницу, погоду, список товаров.

  • POST — отправить данные.
    Применяется, когда клиент хочет передать серверу какую-то информацию: форму регистрации, сообщение, заказ.

  • PUT — полностью обновить данные.
    Например, добавить пользователю новый адрес электронной почты.

  • PATCH — частично обновить данные.
    Например, изменить только номер телефона в профиле.

  • DELETE — удалить данные.
    Применяется, когда нужно что-то удалить, например: комментарий или файл.

Каждый метод используется для своей цели.

Чем отличаются методы PUT и PATCH

Методы PUT и PATCH оба используются для обновления данных. Зависит от того как спроектирован сервер, но ожидается, что PUT полностью заменяет существующий ресурс, а PATCH — изменяет только часть данных.

Можно ли создать свой метод HTTP?

Да, можно создать свой метод HTTP, но это не рекомендуется. Стандартные методы уже хорошо зарекомендовали себя и понятны большинству разработчиков. Использование нестандартных методов может привести к путанице и проблемам с совместимостью. Используйте стандартные методы, чтобы обеспечить лучшую совместимость и понимание вашего API другими разработчиками.