PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    HTTP методы GET POST PUT DELETE: разница и применение

    HTTP методы GET POST PUT DELETE: разница и применение

    Аватар автора HTTP методы GET POST PUT DELETE: разница и применение

    Антон Ларичев

    Иконка календаря27 июня 2026
    HTTPRESTAPIbackendвеб-разработкаjuniorИконка уровня junior
    Картинка поста HTTP методы GET POST PUT DELETE: разница и применение

    Введение

    Каждый раз, когда браузер запрашивает страницу или мобильное приложение обращается к серверу, используется один из HTTP методов. GET, POST, PUT и DELETE — это не просто слова в документации: от правильного выбора метода зависит, насколько ваш API будет предсказуемым, безопасным и понятным другим разработчикам.

    В этой статье разберём каждый метод на практических примерах, объясним понятие идемпотентности и покажем типичные ошибки, которые допускают при проектировании REST API.

    Что такое HTTP метод

    HTTP метод (иногда называют «глагол») указывает серверу, какое действие нужно выполнить над ресурсом. Ресурс — это любая сущность, доступная по URL: пользователь, статья, заказ, файл.

    Стандарт HTTP/1.1 определяет несколько методов, но в повседневной веб-разработке чаще всего используются четыре: GET, POST, PUT и DELETE.

    Метод GET

    GET используется для получения данных. Он не изменяет состояние сервера — только читает.

    GET /api/users/42 HTTP/1.1
    Host: example.com
    

    Пример на JavaScript с использованием fetch:

    // Получаем данные пользователя по ID
    const response = await fetch('/api/users/42');
    const user = await response.json();
    console.log(user.name);
    

    Важные свойства GET:

    • Параметры передаются в строке запроса (query string): /api/users?role=admin&page=2
    • Запросы кешируются браузером и прокси-серверами
    • Не используется для передачи чувствительных данных — URL попадает в логи
    • Безопасен и идемпотентен (об этом подробнее ниже)

    Метод POST

    POST создаёт новый ресурс или отправляет данные для обработки. Данные передаются в теле запроса.

    POST /api/users HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {"name": "Иван", "email": "ivan@example.com"}
    

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

    // Создаём нового пользователя
    const response = await fetch('/api/users', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: 'Иван', email: 'ivan@example.com' })
    });
    
    // Сервер возвращает созданного пользователя с присвоенным ID
    const newUser = await response.json();
    console.log(newUser.id); // например, 43
    

    Сервер обычно отвечает статусом 201 Created и возвращает созданный ресурс в теле ответа. POST не идемпотентен: два одинаковых запроса создадут два разных ресурса.

    Метод PUT

    PUT полностью заменяет существующий ресурс. Если ресурса не существует, некоторые реализации создают его.

    PUT /api/users/42 HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {"name": "Иван Петров", "email": "ivan@example.com", "role": "admin"}
    

    Пример полного обновления:

    // Полностью заменяем данные пользователя
    const response = await fetch('/api/users/42', {
      method: 'PUT',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        name: 'Иван Петров',
        email: 'ivan@example.com',
        role: 'admin'
      })
    });
    

    Ключевое отличие от PATCH: PUT требует передачи полного объекта. Если не передать поле role, оно будет обнулено или удалено.

    Метод PATCH

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

    // Обновляем только имя, остальные поля не трогаем
    const response = await fetch('/api/users/42', {
      method: 'PATCH',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: 'Иван Петров' })
    });
    

    Метод DELETE

    DELETE удаляет ресурс по указанному URL.

    DELETE /api/users/42 HTTP/1.1
    Host: example.com
    

    Пример удаления:

    // Удаляем пользователя с ID 42
    const response = await fetch('/api/users/42', {
      method: 'DELETE'
    });
    
    if (response.status === 204) {
      // 204 No Content — удаление прошло успешно, тело пустое
      console.log('Пользователь удалён');
    }
    

    Сервер обычно возвращает 204 No Content (без тела) или 200 OK с подтверждающим сообщением.

    Идемпотентность и безопасность

    Эти два понятия помогают понять поведение методов при повторных запросах.

    Безопасный метод не изменяет состояние сервера. GET и HEAD — безопасные методы.

    Идемпотентный метод при повторном выполнении с теми же параметрами даёт тот же результат. GET, PUT и DELETE — идемпотентны.

    Метод Безопасный Идемпотентный
    GET Да Да
    POST Нет Нет
    PUT Нет Да
    PATCH Нет Нет*
    DELETE Нет Да

    *PATCH может быть идемпотентным, зависит от реализации.

    Практический смысл: если запрос потерялся в сети, клиент может безопасно повторить GET, PUT или DELETE. Повторять POST без проверки нельзя — рискуете создать дубликат.

    Частые ошибки

    Ошибка 1: Использование GET для изменения данных

    // Неправильно — GET не должен изменять состояние
    fetch('/api/users/42/delete');
    
    // Правильно
    fetch('/api/users/42', { method: 'DELETE' });
    

    Ошибка 2: Передача чувствительных данных в GET-параметрах

    // Неправильно — пароль виден в URL, логах, истории браузера
    GET /api/login?password=secret123
    
    // Правильно — используем POST с телом запроса
    POST /api/login
    {"password": "secret123"}
    

    Ошибка 3: Использование POST вместо PUT/PATCH для обновлений

    // Неправильно — POST для обновления нарушает семантику REST
    fetch('/api/users/update', {
      method: 'POST',
      body: JSON.stringify({ id: 42, name: 'Новое имя' })
    });
    
    // Правильно — PATCH для частичного обновления
    fetch('/api/users/42', {
      method: 'PATCH',
      body: JSON.stringify({ name: 'Новое имя' })
    });
    

    Ошибка 4: Игнорирование кодов ответа

    Метод и код ответа работают в паре. POST при успехе возвращает 201, DELETE — 204, GET — 200. Возвращать 200 на всё подряд — распространённая ошибка, которая усложняет отладку.

    Заключение

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

    Понимание идемпотентности помогает строить надёжные системы: клиенты знают, какие запросы безопасно повторять при сетевых сбоях. Это особенно важно при проектировании микросервисов и распределённых систем, где потери пакетов — норма, а не исключение.

    Иконка глаза5

    Комментарии

    0

    Постройте личный план изучения Nuxt - fullstack Vue фреймворк до уровня Middle — бесплатно!

    Nuxt - fullstack Vue фреймворк — часть карты развития Frontend

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы разработки

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга5.0
    бесплатно
    Подробнее
    изображение курса

    Angular

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга5.0
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Feature-Sliced Design

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.5
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Что такое REST API и как его правильно проектировать
    Иконка аватараАнтон
    Иконка календаря22 июня 2026
    REST APIHTTPbackend+ 2juniorИконка уровня junior

    Что такое REST API и как его правильно проектировать

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

    Иконка чипа0
    Иконка глаза125
    Иконка комментариев0
    Картинка поста WebSocket: что это и как работает в реальных проектах
    Иконка аватараАнтон
    Иконка календаря24 июня 2026
    websocketjavascriptnodejs+ 3juniorИконка уровня junior

    WebSocket: что это и как работает в реальных проектах

    WebSocket — протокол двусторонней связи в реальном времени. Разбираем, как устроено соединение изнутри, и пишем чат на Node.js с нуля.

    Иконка чипа0
    Иконка глаза100
    Иконка комментариев0
    Картинка поста GraphQL с нуля: схемы, резолверы и интеграция с React
    Иконка аватараАнтон
    Иконка календаря14 июня 2026
    GraphQLReactApollo Client+ 2middleИконка уровня middle

    GraphQL с нуля: схемы, резолверы и интеграция с React

    GraphQL с нуля: разбираем схемы, резолверы и интеграцию с React через Apollo Client. Практические примеры запросов, мутаций и подписок.

    Иконка чипа0
    Иконка глаза351
    Иконка комментариев0
    Иконка чипа0