• Информация на сайте предоставляется «как есть», может содержать неточности и не является консультацией или офертой.
  • Перед использованием проконсультируйтесь со специалистом.

Используя сайт, вы подтверждаете, что вы изучили и согласны с документами Политика конфиденциальности и обработки персональных данныхи Пользовательское соглашение.

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

Настройки cookies
Необходимые для работы веб-сайта

Используются для входа, навигации и защиты (например: sessionid, csrftoken). Без них сайт может работать с перебоями.

Помогают улучшить сайт, собирая статистику посещений (например, через Яндекс Метрику).

Используются для показа персонализированной рекламы и ретаргетинга в рекламных сетях.

Настройки интерфейса

Декоративный эффект свечения при клике по странице.

DEV -
PROGRAM.RU
Контакты

CRUD в разработке программ: что это и как работает

Разбираем CRUD: четыре базовые операции с данными в SQL, NoSQL, HTTP и REST API. Где используется и какие ошибки встречаются

CRUD изображение

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

Чтобы упростить взаимодействие между совершенно разными системами и сделать проекты понятнее, придумали CRUD-операции.

Что такое CRUD

CRUD - это аббревиатура с английского языка, означающая 4 типовых операции:

  • create - создание

  • read - чтение

  • update - обновление (полное или частичное)

  • delete - удаление

Где используется CRUD

CRUD операции знакомы и применимы практически везде, где необходимо работать с данными:

  • базы данных

  • мобильные приложения

  • десктопные приложения для компьютера

  • API сервисы

  • веб-сайты: интернет-магазины, блоги, админ-панели

Как CRUD выглядит в разных технологиях

CRUD описывает действия над данными, как паттерн (поведение), имя же операции в конкретном языке или технологии может отличаться.

CRUD в SQL

В реляционных базах данных CRUD записывается четырьмя командами: INSERT, SELECT, UPDATE и DELETE.

INSERT INTO posts (title, text) VALUES ('Привет', 'Первая статья');
SELECT * FROM posts WHERE id = 5;
UPDATE posts SET title = 'Новый заголовок' WHERE id = 5;
DELETE FROM posts WHERE id = 5;

пример CRUD операций в SQL

CRUD в NoSQL

В нереляционных базах данных (NoSQL) на примере MongoDB, операции называются иначе: insertOne(), find(), updateOne() и deleteOne().

db.posts.insertOne({ title: "Первый заголовок", text: "Первая статья" })
db.posts.find({ _id: 5 })
db.posts.updateOne({ _id: 5 }, { $set: { title: "Новый заголовок" } })
db.posts.deleteOne({ _id: 5 })

пример CRUD операций в NoSQL

CRUD в HTTP

HTTP протокол использует отдельный метод для каждой операции:

  • POST создаёт

  • GET читает

  • PUT заменяет запись целиком

  • PATCH меняет только переданные поля

  • DELETE удаляет

CRUD в REST API

В REST API ресурс определяет путь ссылки, а действие HTTP метод.

Для примера: /posts/5/ может читать, обновлять и удалять строку в базе данных, в зависимости от метода.

POST   /posts/      создать статью
GET    /posts/      получить список статей
GET    /posts/5/    получить одну статью
PATCH  /posts/5/    изменить часть полей статьи
DELETE /posts/5/    удалить статью

пример CRUD в REST API

В зависимости от результата обработки запроса REST API может вернуть разный ответ: например 200 OK при чтении и обновлении или 404 Not Found, если не найдено.

название операций в SQL / NoSql / HTTP / REST
ОперацияSQLNoSQL (на примере MongoDB)HTTPREST API путь
CreateINSERTinsertOne()POSTPOST /posts/
ReadSELECTfind()GETGET /posts/5/
UpdateUPDATEupdateOne()PUT / PATCHPATCH /posts/5/
DeleteDELETEdeleteOne()DELETEDELETE /posts/5/

CRUD операции на практике

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

У каждого товара будет id - идентификатор, name - наименование, price - цена и quantity - остаток.

Create: создание записи

Create в CRUD это операция по созданию нового экземпляра.

Менеджер заполняет в админке форму и нажимает сохранить.

пример создания CRUD create в админ панели

Сервер получает данные в таком формате:

POST /products/
Content-Type: application/json

{"name": "Кофемашина", "price": 24990, "quantity": 15}

пример HTTP POST запроса для создания записи в CRUD

После различных проверок в коде, отправляется запрос в базу данных:

INSERT INTO products (name, price, quantity) VALUES ('Кофемашина', 24990, 15);

пример SQL CREATE в CRUD

Если код успешно отработал и используются стандартная логика написания кода, то вернется ответ201 Created, а в базе данных и следовательно в админ панели отобразится только созданный товар.

Read: чтение данных

Менеджер может посмотреть список товаров или один конкретный товар, обе операции подходят под сценарий READ - чтение.

пример чтения CRUD read в админ панели

Сервер получит запрос в одном из форматов, с методом GET.

GET /products/        все товары
GET /products/5/      один конкретный товар

пример HTTP GET запроса для чтения записи в CRUD

После разных действий кода, SQL получит запрос следующего формата:

SELECT id, name, price FROM products LIMIT 10;   -- все товары
SELECT * FROM products WHERE id = 5;             -- 1 конкретный товар

пример SQL READ в CRUD

При успешном получении данных, сервер вернет их с кодом 200 OK, если конкретный товар не найден вернется 404 Not Found.

Update: обновление записи

Update предназначен для обновления данных записи в базе данных.

Менеджер решил немного исправить прежде созданный товар, опечатался в цене.

пример изменения CRUD update в админ панели

В HTTP есть метод PUT для полной перезаписи и PATCH для частичного изменения полей.

PUT /products/5/
Content-Type: application/json

{"name": "Кофемашина", "price": 22990, "quantity": 15}

пример HTTP PUT запроса для полного изменения записи в CRUD

PATCH /products/5/
Content-Type: application/json

{"price": 22990}

пример HTTP PATCH запроса для частичного изменения записи в CRUD

Таблица сравнения PUT и PATCH в HTTP CRUD
PUTPATCH
Что делаетЗаменяет запись целикомМеняет только указанные поля
Что передаёмВсе поля: name, price, quantityТолько изменённые, например price
Пропущенное полеСбросится или вызовет ошибкуОстанется прежним
Когда использоватьФорма редактирования, где видны все поляТочечная правка: цена, остаток

В SQL не будет разницы между частичным или полным изменением, сама разница обычно прописывается в логике кода.

-- PUT: обновляем все поля
UPDATE products SET name = 'Кофемашина', price = 22990, quantity = 15 WHERE id = 5;

-- PATCH: только цену
UPDATE products SET price = 22990 WHERE id = 5;

пример SQL UPDATE в CRUD c возможностью обновить 1 поле или несколько

Сервер ответит ошибкой 404 Not Found, если товар не найден, 400 - если данные не прошли проверку, 200 OK если обновление прошло успешно или 204 No Content если код ничего не возвращает.

Delete: удаление записи

Delete предназначен для уничтожения записи из базы данных.

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

Пример удаления CRUD delete в админ панели

Жёсткое (hard delete) удаление самая опасная из четырёх операций: ошибку часто нельзя отменить, поэтому при проектировании систем к удалению относятся осторожнее, чем к остальным.

Чтобы удаленная запись не навредила пользователям и системе, придумали такое понятие как soft delete (мягкое удаление), запись в базе данных остается, однако помечается галочкой как удаленная или добавляется дата удаления, именно потому крупные веб-порталы и сервисы при утечках теряют и казалось бы навсегда удаленные данные.

Soft delete (мягкое удаление) полезно интернет магазинам или иным сервисам, где важно видеть историю активностей.

таблица сравнения жёсткое (hard delete) и мягкое (soft delete) удаление
Жёсткое (hard delete)Мягкое (soft delete)
Что происходитСтрока удаляется из базыСтавится флаг is_active = FALSE или дата удаления
ВосстановлениеНевозможно (только из бэкапа)Возможно
Старые заказыМогут сломаться или не дадут удалить товарОстаются целыми
Работа послеПрощеВезде нужно фильтровать скрытые товары

Сервер получает стандартный DELETE, как в примере ниже, однако разработчик может изменить поведение кодом на soft delete (мягкое удаление).

DELETE /products/5/

пример HTTP DELETE запроса для удаления записи в CRUD

DELETE FROM products WHERE id = 5;

пример SQL HARD DELETE в CRUD

UPDATE products SET is_active = FALSE WHERE id = 5;

пример SQL SOFT DELETE в CRUD

При успешном удалении сервер ответит кодом 204 No Content или200 OK.

При отсутствии записи, ответит кодом 404 Not Found.

Что такое CRUD приложение

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

Типовое CRUD приложение состоит из нескольких слоев (таблица ниже).

таблица описывает простое CRUD приложение по слоям
СлойЧто делаетПримеры технологий
ХранилищеХранит записиPostgreSQL, MySQL, SQLite, MongoDB
Серверная частьПринимает запросы, проверяет данные и права, выполняет операцииDjango, Laravel, Express, Spring, Wordpress
ИнтерфейсДаёт пользователю список, карточку и формывеб приложение, мобильное или десктопное приложение

Типовой набор экранов

Одна сущность - объект из базы данных (например, товар) обычно требует пять экранов:

  • Список товаров для просмотра (READ): каталог с пагинацией, поиском и фильтрами.

  • Карточка конкретного товара (Read): страница одной записи.

  • Создание (Create): форма добавления.

  • Редактирование (Update): форма с существующими значениями.

  • Страница удаления (Delete): страница или диалог с подтверждением «Вы уверены?».

Примеры CRUD-приложений

  • CRM и ERP: клиенты, сделки, счета

  • админ панели и CMS (Django, Wagtail, DjangoCMS, WordPress)

  • интернет-магазины: каталог, заказы, клиенты

  • таск-трекеры: задачи, проекты, комментарии

  • списки дел, заметки, адресные книги

  • учебные проекты: блог, список задач, каталог книг

Почему студентам дают задачу сделать CRUD приложение

Студентам часто дают задачу "написать CRUD приложение" потому что:

  • охватывает многие дополнительные темы (проверка данных и доступов, проектирование маршрутов, работа с базой данных и формами, отображение шаблонов)

  • можно дать уникальное задание: кому-то интернет магазин книг, а кому-то учет животных в зоопарке

  • такой проект долгоиграющий, можно бесконечно создавать более сложные задачи

  • результат легко проверить и выявить ошибки за пару кликов

  • это реальный навык, который можно использовать на другом языке/фреймворке в будущем

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

Если у вас остались вопросы по теме CRUD, вы можете связаться с программистом.

Вам может быть интересно

Поделиться
Ничего не найдено
Найдите нужную страницу

Статьи, инструменты и помощь