Использование HTTP REST обертки xmysql для работы с MySQL на примере OpenCart

05.11.20

Интеграция - WEB-интеграция

В статье опишу вариант работы с MySQL базой используя HTTP.

Вводные

  • CMS, например OpenCart, использующая MySQL
  • Сайт развернут на VDS и есть возможностью использовать node.js
  • Нужно организовать обмен с CMS
  • Web сервер NGINX

 

Варианты решения

  • Использование модулей работающих с форматом CommerceML и настройкой типового функционала в 1С, пример https://github.com/KirilLoveVE/opencart2-exchange1c или платные аналоги
  • Использование модулей которые реализуют обертку SQL запросов и ответных обработок к ним
  • Использование прямого подключения к MySQL
  • Использование REST API, только платный вариант и со своими проблемами
  • Использование HTTP обертки для MySQL

К данному варианту решения подтолкнула статья про PostgREST //infostart.ru/1c/articles/1217831/

 

Реализация

Для решения задачи использую https://github.com/o1lab/xmysql

Устанавливаю пакет 

npm install -g xmysql

Запускаю сервис

xmysql -h localhost -u opencartuser -p yHL0nVwQrQ5k9PSAYAcU -d opencart

Если подключение прошло успешно, то вижу

          Generating REST APIs at the speed of your thought..

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

          Database              :    opencart
          Number of Tables      :    136

          REST APIs Generated   :    2593

          Xmysql took           :    0.3 seconds
          API's base URL        :    localhost:3000

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

Создаю перенаправление на обертку на уровне nginx

 
 Настройки NGINX

 

Проверяю работоспособность

 
 Скриншот

 

Нужно понимать что доступ через обертку имеет полные права на базу и идет без проверки прав доступа, имеет смысл поставить на уровне конфигурации сайта NGINX ограничения по IP (документация) и использовать аутентификацию, например basic (документация). Так же имеет смысл настроить HTTPS и при возможности организовать VPN канал от сервера 1С до VDS.

Останавливаю xmysql.

 

Для запуска в качестве сервиса использую pm2 https://pm2.keymetrics.io/

Добавляю сервис xmysql в pm2 (ссылка на источник)

sudo pm2 start --name "xmysql-api" xmysql -- -h localhost -u opencartuser -p yHL0nVwQrQ5k9PSAYAcU -d opencart

Настраиваю pm2 для автоматического запуска

sudo pm2 startup

sudo systemctl enable pm2-root

Сохраняю настройки запущенных сервисов.

sudo pm2 save

В моем случае (тестовый сервер) сервис pm2 запускается из под root, что некорректно с точки зрения безопасности, имеет смысл добавить пользователя с ограниченными правами и работать с pm2 из под него.

Перезапускаю сервер, проверяю работоспособность.

 

Захожу на сайт "http://oc.malikov.pro/index.php?route=product/product&product_id=43"

Получаю данные товара "GET http://xmysql.malikov.pro/api/oc_product/43"

 
 результат в формате JSON

 

Обновляю цену "PATCH http://xmysql.malikov.pro/api/oc_product/43"

{
    "price": 600
}

 

Проверяю на сайте

 
 Скриншот

 

Итог

При отсутствии API для CMS с базой на MySQL можно относительно просто и безопасно организовать работу с данными.

Для фиксации внешних идентификаторов в 1С можно использовать наработки из //infostart.ru/1c/articles/1256935/

 

Благодарю за внимание.

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    4191    5    0    

11

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    35795    71    45    

30

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    3275    3    3    

5

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    1368    9    2    

11

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    19629    24    24    

20

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    5477    5    2    

6

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 1C:Бухгалтерия Управленческий учет Платные (руб)

Решение осуществляет синхронизацию задач Битрикс24 и 1С, что позволяет в одной системе ставить задачи, контролировать выполнение всего пула задач с группировкой по ответственным и проектам, формировать управленческие отчеты по работе сотрудников (загрузка, просроченные задачи), уведомлять сотрудников о ходе выполнения задач посредством чат-бот Telegram

7200 руб.

04.05.2021    21281    14    19    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bobeni 28.09.20 14:43 Сейчас в теме
Александр, при работе не через API CMS, остаются все риски/проблемы…
Раз напрямую с MySQL, то почему не через «внешние источники»? И зачем рассматривать прямое подключение?
Спасибо!)
2. malikov_pro 1332 28.09.20 18:12 Сейчас в теме
(1) "при работе не через API CMS, остаются все риски/проблемы" - согласен, но при данном варианте получается более прозрачно по коду (из опыта работы с OC).

"то почему не через «внешние источники»" - с точки зрения организации ограниченного доступа и контроля проще, для mysql нужно ADODB драйвер подходящий и права на его использование, открывать TCP и порт который хуже прослушивается/контролируется. При обертке выдать только право на доступ к URL по HTTP.

С учетом отсутствия API со стороны CMS и при том что реализацию пишу сам, например https://infostart.ru/1c/articles/1185983/, в некоторых случаях проще написать реализацию на стороне 1С.
Оставьте свое сообщение