Эта статья также доступна в моем личном блоге

Это четвертая часть серии статей с целью создания системы для уведомления о соответствующих твитах и ​​их ретвита в приложении для iOS.

В этой статье мы увидим, как настроить базу данных MySQL и как выполнять запросы из Node.

Что мы увидим?

  • Установка и настройка MySQL
  • Таблицы и создание атрибутов
  • Базовый скрипт Node.js для подключения к БД
  • Необходимые запросы для SimpleRTApp

Требования

Чтобы следовать этой статье, необходимо получить базовое представление о реляционных базах данных, SQL-запросах и установке Node.js в системе.

Почему MySQL?

MySQL - это система управления реляционными базами данных или СУБД. Этот менеджер баз данных является многопоточным и многопользовательским, что позволяет использовать его нескольким людям одновременно и даже делать несколько запросов одновременно, что делает его чрезвычайно универсальным.

Это началось как инициатива свободного программного обеспечения и до сих пор предлагается как таковая для частных пользователей. Но если вы хотите использовать его для управления данными в компании, вы можете купить лицензию, например, на проприетарное программное обеспечение, созданное компанией-спонсором (Oracle).

Я собираюсь перечислить некоторые преимущества MySQL как менеджера БД:

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

С другой стороны, есть и недостатки:

  • Имеет некоторые недостатки стабильности.
  • Страдает низкой производительностью масштабируемости
  • Его разработка не ведется сообществом
  • Его функциональность сильно зависит от надстроек.
  • Разработчики могут найти некоторые из своих ограничений немного разочаровывающими.

Другие варианты на маркете

Хотя я выбрал MySQL для этого проекта, ничто не мешает нам использовать другие варианты, доступные на рынке. Наиболее важные из них:

  • MariaDB
  • PostgreSQL
  • SQLServer
  • MongoDB

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

Установка и настройка локальной MySQL

  1. Скачиваем пакет .dmg по этой ссылке. Следуем этапам установки, выбирая все компоненты по умолчанию. Подробнее о том, как установить MySQL, здесь.

2. В конце установки нам будут предоставлены учетные данные для учетной записи root. Следует иметь в виду, что MySQL быстро истекает срок действия этого пароля по соображениям безопасности, поэтому нам придется изменить его, как только он будет предоставлен нам. Более подробная информация по этой ссылке.

3. Устанавливаем приложение SequelPro (только для MacOS), скачивая пакет по этой ссылке. Это приложение позволит нам взаимодействовать и настраивать нашу базу данных. В нем мы вводим наши корневые учетные данные, чтобы начать работу.

4. Мы создаем новую базу данных, выбирая Database -> Add database.... Мы вводим имя типа simplertapp и нажимаем «Добавить».

5. Мы создаем новую таблицу, нажав на кнопку + слева внизу. Ставим имя liketweet_request и нажимаем на Добавить.

6. Создаем поля таблицы, нажав на кнопку + в окне просмотра полей, которое находится над INDEXS. По умолчанию он будет создан с типом INT. Мы указываем id как имя, так как это будет идентификатор данных tweet_request.

Следуя предыдущим шагам, мы создаем следующие таблицы с соответствующими полями:

Чтобы использовать эти поля, важно установить VARCHAR тип и device_token долготу и hashtags на более высокое значение.

После создания таблиц у нас уже есть база данных, правильно настроенная для ее использования.

Использование Node.js для запроса, обновления и удаления данных

  1. Устанавливаем пакет MySQL делая npm install mysql --save через терминал
  2. Мы создаем сценарий под названием mysql_example.js со следующим содержанием:

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

Затем мы создаем соединение с базой данных, устанавливая необходимые значения:

  • host: это адрес, по которому находится наша база данных. К настоящему моменту он будет иметь значение 127.0.0.1.
  • user: это наше имя пользователя. В этом случае это будетroot.
  • password: Это пароль, который мы установили ранее для использования SequelPro.
  • database: это имя базы данных. В нашем случае это будетsimplertapp.

Чтобы установить эти значения, я создал .env файл, чтобы хранить их в более безопасном виде. Подробнее здесь

Наконец, мы делаем следующий SQL-запрос к базе данных:

INSERT INTO tweet_request (device_token, hashtags) VALUES (‘ExampleDeviceToken’, ‘#Example #Hashtags’)

Он вставит значения ExampleDeviceToken и "#Example #Hashtags" как значения первой записи. Поле id не является обязательным, поскольку оно увеличивается автоматически.

Если все прошло правильно, скрипт завершится, иначе в консоли отобразится найденная ошибка.

3. Запускаем скрипт с node mysql_example.js в терминале.

Чтобы убедиться, что поле было вставлено правильно, мы переходим в SequelPro, выбираем tweet_request таблицу и во вкладке Content смотрим вставленную запись:

При этом мы создали наш первый скрипт на Node.js, который позволяет нам вставлять записи в базу данных MySQL.

Вы можете найти код скрипта в https://github.com/fedejordan/SimpleRTAppAPI с тегом mysql_example. Важно, чтобы вы правильно настроили .env файл с необходимыми свойствами для подключения к базе данных.

Использование MySQL в SimpleRTApp API

Как мы видели в статье Создание API REST, мы запрашивали и изменяли данные в памяти. Идея состоит в том, чтобы сохранить всю эту информацию в базе данных, чтобы мы могли правильно запрашивать и изменять наш Node.js API.

Если посмотреть на доступные конечные точки в нашем API, нам понадобятся следующие функции:

  • Получите tweet_request записей по его id.
  • Удалите tweet_request по его id.
  • Вставьте записи tweet_request, указав его device_token и его hashtags.
  • Вставьте записи posted_tweet, указав его tweet_request_id и его tweet_id.

Для этого мы собираемся создать файл подключения к БД с именем databaseHelper.js, в котором мы будем выполнять основное соединение с базой данных, а указанный запрос с помощью параметра sqlQuery.

Примечание. Для простоты подключение к базе данных будет создаваться для каждого полученного запроса. Это НЕПОЛУЧИТЕЛЬНО, так как оно должно обрабатываться через пул подключений, но эта тема не будет рассматриваться в этой статье. Подробнее о пуле подключений здесь.

Продолжаем создание tweetRequestDatabase.js файла в папке api/database со следующим содержимым:

В этом файле мы получаем ссылку на databaseHelper, и с параметрами в функции insertTweetRequest мы создаем SQL-запрос и запускаем его.

Наконец, мы меняем наш tweetRequestController.js следующим образом:

Изменяя то, что было раньше, мы получаем ссылку на tweetRequestDatabase и вставляем объект tweetRequest, созданный в базе данных с помощью tweetRequestDatabase.insertTweetRequest(tweetRequest).

Мы запускаем наш сервер в терминале с node server.js и открываем Posting, чтобы выполнить POST /tweetRequest:

Поскольку мы продолжаем поддерживать массив памяти, мы все еще получаем id 10.

Заходим в SequelPro, чтобы увидеть, была ли вставлена ​​наша запись:

В зависимости от того, сколько значений мы вставили ранее, поле id может быть другим. В моем случае я удалил предыдущий, который мы вставили с помощью сценария mysql_example.js, и сбросил автоинкрементный id. Для этого мы можем запустить следующий SQL-запрос в SequelPro во вкладке Query:

ALTER TABLE tweet_request AUTO_INCREMENT = 1

При этом наш API может вставлять значения в базу данных;)

Полный пример

С предыдущим содержанием мы можем закончить другие конечные точки API. Это должно быть примерно так:

В tweetRequestDatabase.js мы добавляем функции для выполнения соответствующих SELECT иDELETE с определенным tweetRequestId. Мы добавляем callback, чтобы знать, когда закончилась операция записи или чтения.

В tweetRequestController.js мы удаляем всю логику, связанную с массивом памяти, и используем callback, который tweetRequestDatabase дает нам, чтобы отправить ответ со статусом 200, завершив его.

Мы добавляем правильно postedTweetDatabase.js, чтобы отправить INSERT с данными postedTweet в базу данных.

Наконец, мы также обновляем postedTweetController.js, чтобы можно было использовать postedTweetDatabase, и, если все пойдет правильно, отправим 200 код состояния.

Со всем этим мы выполнили все требования для нашего API, поэтому мы можем запрашивать, удалять или вставлять записи в базу данных MySQL :)

Некоторые соображения

Из-за простоты, которую я хотел объяснить предметом, мы не затронули некоторые темы:

  • Создавать соединение для каждого запроса неэффективно. Это совершенно не масштабируемый процесс, и для этого требуется создать пул запросов. Я объясню это в новой статье позже. Подробнее об этом.
  • Отсутствует обработка статусов ошибок для любого сбоя, который у нас есть (например, если мы хотим удалить tweetRequest с недопустимым tweetRequestId), API не отправляет статус ошибки. Это очень важно, если мы хотим связаться с клиенту, что серверу не удалось выполнить задачу. См. обработку ошибок.

Выводы

Мы установили MySQL. Мы увидели, как настроить базу данных в локальной среде. Мы узнали это простым способом, просто используя SequelPro, который мы использовали для создания таблиц и полей разных типов.

Позже мы увидели, как взаимодействовать с базой данных MySQL с помощью Node.js. Мы увидели, как выполнять операции запроса, вставки и удаление записей.

Наконец, мы интегрировали все эти операции в REST API, который мы создали в предыдущей статье.

Хотя не все программисты используют Node.js и MySQL в своей повседневной работе, я считаю, что минимальное выполнение этих шагов даст нам базовое понимание того, как построен REST API, и мы сможем лучше понять все система.

В следующей статье мы настроим наше приложение iOS для использования всех этих API.

Спасибо, что прочитали статью!

Источники