Представьте мобильное приложение для туризма. В нем пользователь может изучать карту местности и:
-
Создавать записи о местах, которые хочет посетить
-
Просматривать информацию о городах и достопримечательностях
-
Исправлять информацию о достопримечательностях
-
Удалять записи о местах, которые больше не хочется посетить
Другой пример — вы администратор художественной онлайн-галереи. Вам необходимо:
-
Создавать записи о новых художниках и их работах
-
Просматривать информацию об экспонатах
-
Редактировать информацию о художниках и экспонатах
-
Удалять записи о работах, которые убрали из галереи
В этих сценариях прослеживаются базовые действия: создание, чтение, обновление и удаление. Они известны как CRUD (Create Read Update Delete).
В этом уроке мы изучим каждую из операций CRUD. Вы разберетесь в особенностях создания, чтения, обновления и удаления. Также вы узнаете, как тестировать CRUD на примере сервиса Яндекс.Карты.
Особенности CRUD
Сначала разберем каждую операцию CRUD в отдельности. Все операции связаны друг с другом. Например, мы не можем получить доступ к удаленному товару или удалить товар, который еще не создан. Эти вещи кажутся очевидными, но всегда есть вероятность допустить ошибку, что может привести к неожиданным результатам.
Create
Создание новых данных — ключевая функция всего CRUD. Остальные операции не имеют смысла без создания новой записи в базе данных.
При создании новой записи важно валидировать данные, как и в любой форме. Подробнее про валидацию вы узнали из урока «Формы».
Валидация помогает не допустить ошибочные данные в базу и таким образом предотвратить возможные ошибки при чтении. Правильная валидация данных так же обеспечивает защиту от вредоносных значений, которые могут быть добавлены в базу данных.
Read
Чтение данных — операция, которая доступна всем пользователям. Зачастую, чтение — единственная операция, которая доступна пользователю без прав администратора. Например, вы и другие студенты Хекслета можете читать этот урок, но отредактировать урок или создать новый не получится.
В операции чтения важно контролировать доступ к информации. Пользователь не должен видеть информацию, к которой у него нет доступа. Например, как владелец банковского счета вы можете увидеть только свой баланс, доступа к чужим счетам у вас нет.
Update
Операция обновления похожа на создание — с ее помощью мы вносим изменения в базу данных. В случае с обновлением важно корректно сохранять ранее внесенные данные. Например, если вы меняете свой логин на сайте, то при этом не должна затрагиваться информация о пароле и электронной почте.
Delete
Удаление — последняя операция для CRUD. Она удаляет записи из базы данных, будь то информация о картине или метка на карте.
Обычно удаление выполняется после проверки прав доступа к данным. Например, если пользователь не имеет право удалять записи, запрос не сработает. Если право есть, система начинает удалять данные.
С точки зрения реализации удаление делится на два типа:
-
Физическое — запись стирается из базы данных без возможности восстановления
-
Логическое — к записи закрывается доступ на чтение, то есть она скрывается. Доступ всегда можно восстановить при необходимости. Логическое удаление больше похоже на обновление, потому что физически запись в базе данных остается
Как тестировать CRUD
Попробуем протестировать CRUD-операции вручную. Для этого воспользуемся сервисом Яндекс.Карты, который позволяет создавать списки меток и добавлять интересные точки на карте. Этим сервисом часто пользуются путешественники, чтобы добавить все интересующие их места на карте:
Представим, что нам нужно протестировать эту функциональность и проверить корректность создания списка, его обновления, чтения и удаления.
Тестировать будем по такому сценарию:
-
Создать список
-
Добавить две точки на карте
-
Проверить их отображение в списке
-
Удалить список
Добавление списка
Создадим новый список и назовем его «Отпуск»:
Здесь мы видим операцию создания — в нашей учетной записи появляется новый список. Этот список доступен только для нашей учетной записи.
Он позволяет проводить остальные операции по CRUD:
-
Чтение списка
-
Обновление записей в списке — добавление или удаление точек на карте
-
Удаление списка
Добавление точек в список
Теперь попробуем обновить список. Добавим две точки на карте:
На этом шаге мы обновили список. Обратите внимание, что обновляется только список. Сами точки на карте — это лишь часть списка, они не изменяются. Филиал Третьяковской галереи и информация о нем никак не изменится от того, что мы добавили точку в наш список.
Просмотр точек в списке
Проверим, что точки добавились корректно. Для этого перейдем в список «Отпуск»:
Здесь мы производим операцию чтения. Во время тестирования мы проверяем, точно ли все данные выведены на экране. Пользователь должен увидеть:
-
Изображения точек
-
Количество точек
-
Каждая точка в отдельности
Важно проверить, что чтение списка доступно только создателю или тем, кому открыт доступ на чтение списка.
Удаление категории
После проверки списка на чтения осталось его удалить:
Удаление списка стирает не только список, но и все точки на карте, связанные с этим списком. Важно, чтобы точки на карте не были привязаны к несуществующему списку.
Еще одна особенность — подтверждение удаления. Это сделано, чтобы случайно не удалить категорию:
Такой подход часто критикуется, хотя этот вопрос лежит уже в области дизайна и взаимодействия с пользователем. Если кнопка подтверждения есть, то стоит проверить, что список не удаляется до подтверждения.
Выводы
В этом уроке мы разобрали механизм, который называется CRUD. Он состоит из четырех базовых операций, которые происходят в базе данных:
-
Create — создание
-
Read — чтение
-
Update — обновление
-
Delete — удаление
Каждая из этих операций обладает своими особенностями и зачастую связана с проверкой прав доступа к той или иной операции. Например, студенты Хекслета могут только читать урок, тогда как сотрудники — обновлять уроки и удалять их.
Во время ручного тестирования CRUD мы воссоздаем сценарий использования сайта и проверки всех операций. Этот сценарий называют «путь пользователя».
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты