Неважно, в какой сфере вы работаете: backend-разработчик, frontend, архитектор БД, системный аналитик, тестировщик или кто-то еще. А может, вы только ищете работу в IT? Или просто интересуетесь, как устроен цифровой мир. Эта статья - возможность освежить в памяти базовые концепции программирования, подготовиться к собеседованию (ведь вопрос про CRUD-операции может прозвучать не напрямую, но почти всегда скрыт в других задачах или кейсах) или просто понять, как устроены ваши любимые приложения.

Вопрос на миллион: Знаете ли вы, что общего между созданием поста в Нельзяграм, покупкой на Ozon и обновлением резюме на hh.ru?

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

Что такое API и при чем тут CRUD?

Прежде чем переходить к CRUD, давайте вспомним, что такое API (Application Programming Interface).

Рассмотрим на простом примере:
Представим ресторан. Вы — клиент (Frontend), видите меню (Интерфейс) и делаете заказ. Официант (API) принимает ваш заказ, относит его на кухню (Backend и База данных) и приносит вам готовое блюдо.

Таким образом, API — это мост между пользователем и системой, между интерфейсом и базой данных. Это набор правил и протоколов, который позволяет разным программам общаться друг с другом.

Когда вы публикуете пост, лайкаете комментарий или обновляете профиль — вы не думаете о том, какие запросы происходят «под капотом». А там как раз работает API, который передаёт команды серверу: «Создай запись», «Покажи мне список», «Обнови данные», «Удали неактуальное».

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

Именно для структурирования и стандартизации этих действий существует концепция CRUD.

Что такое CRUD?

CRUD — это акроним, который расшифровывается как:

  • Create (Создать)

  • Read (Прочитать)

  • Update (Обновить)

  • Delete (Удалить)

Именно эти операции лежат в основе всей архитектуры веб-приложений (соцсетей, интернет-магазинов, банковских приложений), API и баз данных. Прежде чем проектировать базу данных или интерфейс, разработчик продумывает — что пользователь сможет создавать, что читать, что редактировать и что удалять. Это и есть логика CRUD. Без CRUD приложение будет статичным, как старая HTML-страничка. А с ними — динамичным, удобным и масштабируемым.

Разбираем CRUD на живом примере

Чтобы не быть голословными, рассмотрим все операции на примере, знакомом каждому — публикации поста в социальной сети. А в качестве примера кода мы возьмем условный HTTP-запрос:

1. Create (Создать) — «Написать пост»

Это момент, когда вы создаете что-то новое в системе.

  • Что делаете вы: Вводите текст, добавляете заголовок и фото, жмете «Опубликовать».

  • Что происходит за кулисами: Ваше приложение отправляет через API запрос на сервер с командой «Создать новую запись (пост) с этими данными».

    Метод POST в HTTP как раз и отвечает за создание
    Метод POST в HTTP как раз и отвечает за создание

2. Read (Прочитать/Получить) — «Смотреть ленту или открыть пост»

Это операция получения данных без их изменения.

  • Что делаете вы: Листаете ленту, открываете чью-то страницу, читаете пост.

  • Что происходит за кулисами: Приложение шлет запрос: «Дай мне данные поста с таким-то ID». Сервер находит пост с id=789 (к примеру) и возвращает его вашем приложению, которое красиво его отображает.

    Метод GET — для чтения
    Метод GET — для чтения

3. Update (Обновить) — «Редактировать пост»

Исправление опечатки или добавление нового фото в уже опубликованное.

  • Что делаете вы: Жмете «Редактировать», вносите изменения, сохраняете.

  • Что происходит за кулисами: Запрос: «Обнови запись с ID=789, заменив старые данные на эти».

    Для обновления часто используются методы PUT или PATCH. При использовании PATCH мы меняем только текст и добавляем флаг "edited": true, остальные поля поста (author, imageUrl, likes, createdAt) — не трогаем.
    Для обновления часто используются методы PUT или PATCH. При использовании PATCH мы меняем только текст и добавляем флаг "edited": true, остальные поля поста (author, imageUrl, likes, createdAt) — не трогаем.

Давайте сразу поймем отличия: "В чем разница между PUT и PATCH?". Этот вопрос вы также можете часто слышать на собеседовании.

  • PATCH изменяет только часть ресурса (частичное обновление). Используется, если необходимо изменить определенные поля объекта (как поле text в примере выше).

  • PUT полностью заменяет существующий ресурс новыми данными. Передаются все поля объекта, сервер возвращает обновлённую полную версию ресурса (старый объект полностью перезапишется). Поэтому очень важно при использовании PUT передать всю структуру поста, а не только изменённые поля. Если пропустить, например, likes или imageUrl, сервер может их удалить, потому что считает, что это новая версия объекта. Вот, как будет выглядеть HTTP запрос и ответ сервера при PUT ?

    При использовании PUT мы передаём всю структуру поста — как будто перезаписываем весь объект заново. Если мы не включим какие-то поля (например, likes), сервер может их стереть, потому что PUT предполагает полную замену.
    При использовании PUT мы передаём всю структуру поста — как будто перезаписываем весь объект заново. Если мы не включим какие-то поля (например, likes), сервер может их стереть, потому что PUT предполагает полную замену.

Также ответим на вопрос, который всегда зададут вам при упоминании PUT и PATCH. Какой из методов является идемпотентным, а какой - нет?

Идемпотентность — это свойство операции, при которой повторный запрос даёт тот же результат, что и первый.

PUT — идемпотентный. Если вы отправите один и тот же запрос PUT несколько раз — результат всегда будет одинаковым. Каждый раз сервер просто перезапишет запись одними и теми же данными.

С PATCH все немного сложнее. PATCH может быть как идемпотентным, так и неидемпотентным, — всё зависит от того, как сервер реализует обработку частичных обновлений.

Если мы каждый раз будем отправлять одинаковый запрос (к примеру мы 100 раз отправим HTTP запрос запрос на изменение полей "text" и "edited" из примера выше с одними и теми же значениями), и сервер каждый раз приводит объект в одно и то же состояние, — то это идемпотентный PATCH.

Если сервер применяет операцию на основе текущего состояния, то повторный вызов изменяет результат. Пример: когда пользователь нажимает кнопку «Лайк», браузер отправляет на сервер PATCH-запрос, который увеличивает значение счётчика лайков на 1 — и при каждом повторном запросе значение счётчика продолжает расти. В таком случае PATCH является неидемпотентен, так как не просто «устанавливается» новое значение, а меняется существующее, и поэтому результат каждый раз будет разным.

4. Delete (Удалить) — «Удалить пост»

И вот вы стоите в очереди за кофе, листаете свою страницу со старыми постами и, раскрыв очередную статью, думаете: "Как можно было написать такую ерунду?". Вы решаете удалить старый пост.

  • Что делаете вы: Жмете на три точки и выбираете «Удалить».

  • Что происходит за кулисами: Запрос: «Удали запись с ID=789 навсегда».

Метод DELETE удаляет указанный ресурс
Метод DELETE удаляет указанный ресурс

Заключение

CRUD - это фундамент, на котором строятся все интерактивные веб-приложения, ведь за каждым вашим кликом стоит четкая команда для базы данных.

CRUD — это основа для:

  • Проектирования базы данных.

  • Написания логики на бэкенде.

  • Создания интуитивно понятного интерфейса.

Именно поэтому эти операции нужно знать всем, кто хоть как-то касается данных, API или пользовательского функционала.

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


  1. ncix
    28.11.2025 07:26

    Давайте сразу поймем отличия: "В чем разница между PUT и PATCH?". Этот вопрос вы также можете часто слышать на собеседовании.

    Справедливости ради, разницы нет никакой. Patch, put, get, post и другие - просто один из параметров запроса, сервер волен обрабатывать как ему вздумается. Поэтому правильный ответ - зависит от реализации сервера.

    В том же json-rpc вообще все запросы - POST