BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • Структура
    • Доступ к участкам проекта
    • Разворачивание нового проекта
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • IOCore класс
    • Route и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $iodb и работа с базой данных
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS

IO v7. Доступ к участкам проекта

Термины

  • Gate Protocol – протокол общения между двумя бэкендами. Этот протокол позволяет вызывать статические методы class. Для авторизации используется секретный ключ и проверка по IP адресу.
  • Entity Protocol – протокол общения между фронтендом и бэкендом. Этот протокол позволяет вызывать методы api (model). Для авторизации используется токен авторизации, сохраненный в cookie.
  • Entity Name – название сущности, к которой нужно обратиться.

Описание

В данной версии фреймворка доступ к class, api (model) любого проекта осущствляется следующим образом:

ЗАМЕТКА

Во фреймворке IO v6 помимо class и model, можно было обращаться еще и к view и controller.

Но в IO7 появились модули, из-за чего способ получения доступа немного видоизменился.

Используется нотация "точка". Каждый элемент разделяется знаком точки.

Первое слово (или набор слов, разделяемых точкой) - это apiname проекта, в котором находится требуемый файл (например: com это проект кабинет, com.notice это проект системы уведомлений и т.д. Полный список проектов и их apiname содержится в глобальной переменной $ioProjects, а apiname проекта устанавливается в переменной IOPROJECT в файле project/conf.php). Если обращение происходит к локальному файлу (файлу текущего проекта), то используется слово app. Есл иобращение происходит к файлу фреймворка, то используется слово io.

Второе слово - это тип файла.
Существует всего 2 типа:

  • class.
  • api, model.

Третье слово (или набор слов, разделяемых точкой) - (только для модулей) это имя модуля, указываемое в методе module_name() в его файле настроек.

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

Пятое слово - это имя требуемого файла.

Шестое слово - (только для class и api (model)) название вызываемого метода.

  • Для api (model) - название метода без префикса action и do, начиная с маленькой буквы.
  • Для class - название метода, начиная с маленькой буквы.

Пример:

// вызов метода dbsearch2() class файла app/class/cms/widgets.php проекта com
'com.class.cms.widgets.dbsearch2'

// вызов метода dbsearch2() локального class файла app/Classes/Goods.php
'app.class.goods.dbsearch2'

// вызов метода doWorld() локального api (model) файла app/Api/HelloApi.php
'app.api.hello.world'

// аналог вызова вышеописанного метода (сохранен старый формат)
'app.model.hello.world'

Обращение к Entity Protocol

Адрес Entity Protocol:

http://<домен_проекта>/entity/<entity_name>/?resultType=json&resultNoParams=0&account=56340&lang=ru

Обращаться через Entity Protocol можно только к api (model).

Get параметры:

  • resultType: возвращаемый результат.
    • html: в формате html.
    • json: в формате json (рекомендуется по умолчанию).
    • serialize: в формате serialize array.
  • resultNoParams: результат не должен содержать входных параметров.
    • 1: да (если передается большой файл, то нужно использовать эту опцию).
    • 0: нет (рекомендуется во всех остальных случаях).
  • account: под каким аккаунтом нужно выполнять код.
  • lang: язык.
    • ru: русский (рекомендуется по умолчанию).

Передаваемые cookie:

  • bmc_session: сессия.

Post параметры:

  • entitypost: массив входных данных.

Выходные данные:

  • params: входные данные, если resultNoParams=0.
  • method: метод, который был вызван.
  • res: результат операции.
  • res.error_code: номер ошибки.
  • res.error_str: текст ошибки.
  • content: что выводила функция через echo.
  • ms: серверное время выполнения функции.
{
    "resultNoParams": false,
    "params": {
        "resultNoParams": "0",
        "account": "56340",
        "lang": "ru"
    },
    "method": "com.notice.model.notices.getUnreadedCount",
    "res": {
        "error_code": 1,
        "error_str": "",
        "count": 0
    },
    "content": "",
    "ms": -356
}

Обращение к Gate Protocol

Чтобы обратиться к Gate Protocol, нужно отправить POST запрос по адресу:

http://<домен_проекта>/gate/<entity_name>/

Обращаться через Gate Protocol можно только к class.

Post параметры:

  • entitypost: массив входных данных.
  • sign: подпись сервера, который отправил запрос.
  • time: время отправки запроса.

Выходные данные:

  • serverfrom: с какого сервера пришел ответ.
  • method: метод, который был вызван.
  • res.error_code: номер ошибки.
  • res.error_str: текст ошибки.
  • content: что выводила функция через echo.
  • ms: серверное время выполнения функции.

Данные всегда возвращаются в формате JSON.

Метод подписи

$str = $entity . '|' . $time;
$sign = hash_hmac('sha512', $str, IOSECRETKEY);

Во время проверки подписи проверяется время формирования пакета. Если пакет был сформирован более 2х минут назад, то этот запрос считается устаревшим и выдается ошибка EIO_DENY.

Prev
Структура
Next
Разворачивание нового проекта