IO v6. Доступ к участкам проекта
Термины
- Gate Protocol – протокол общения между двумя бэкендами. Этот протокол позволяет вызывать статические методы class. Для авторизации используется секретный ключ и проверка по IP адресу.
- Entity Protocol – протокол общения между фронтендом и бэкендом. Этот протокол позволяет вызывать методы model. Для авторизации используется токен авторизации, сохраненный в cookie.
- Entity Name – название сущности, к которой нужно обратиться.
Описание
В данной версии фреймворка доступ к class, model, view, controller любого проекта осущствляется следующим образом:

Используется нотация "точка". Каждый элемент разделяется знаком точки.
Первое слово (или набор слов, разделяемых точкой) - это apiname проекта, в котором находится требуемый файл (например: com это проект кабинет, com.notice это проект системы уведомлений и т.д. Полный список проектов и их apiname содержится в глобальной переменной $ioProjects, а apiname проекта устанавливается в переменной IOPROJECT в файле project/conf.php). Если обращение происходит к локальному файлу (файлу текущего проекта), то используется слово app. Есл иобращение происходит к файлу фреймворка, то используется слово io.
Второе слово - это тип файла.
Существует всего 4 типа:
class.model.view.controller.
Третье слово - это папка или папки, разделяемые точкой, т.е. путь до требуемого файла (при необходимости). Подпапки указываются точечной нотацией.
Четвертое слово - это имя требуемого файла.
Пятое слово - (только для class и model) название вызываемой функции.
- Для model - название функции без префикса
actionиdo, начиная с маленькой буквы. - Для class - название функции, начиная с маленькой буквы.
Пример:
// вызов функции dbsearch2() class файла app/class/cms/widgets.php проекта com
'com.class.cms.widgets.dbsearch2'
// вызов функции doWorld() локального model файла app/model/helloModel.php
'app.model.hello.world'
// ссылка на view файл фреймворка app/io/app/view/global/anyfile.html
'io.view.global.anyfile'
// ссылка на локальный controller файл app/controller/mainController.php
'app.controller.main'
Обращение к Entity Protocol
Адрес Entity Protocol:
http://<домен_проекта>/entity/<entity_name>/?resultType=json&resultNoParams=0&account=56340&lang=ru
Обращаться через Entity Protocol можно только к 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.