Протокол состоит из двух частей: запросы к серверу и ответы сервера. Запросы к серверу передаются методом POST. Ответы сервера формируются в виде XML.
Каждый запрос должен содержать в обязательном порядке параметр POST session_id – ID сессии клиента. Исключением является только функция авторизации клиента. Функция авторизации содержит два параметра:
login - содержит имя пользователя на форуме и
password – пароль.
Если какой-либо из параметров отсутствует, сервер вернет ошибку. Если отсутствует параметр action – сервер отобразит Web интерфейс. Ниже в описании протокола параметр session_id я буду опускать, считается, что он присутствует всегда. Все описанные ниже параметры POST для конкретного значения параметра action являются обязательными.
Пример запроса авторизации:
https://domain/xfr/index.php?action=auth&login=nickname&password=123456
Пример запроса списка категорий:
http://domain/xfr/index.php?session_id=hsg8745th3qgq9g3g&action=get_categories&categories=1,2,3,4
Как упоминалось выше, ответы сервера формируются в XML формате. Перед выводом XML отдаются заголовки:
@header('Content-Type: text/xml; windows-1251'); @header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); @header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); @header('Pragma: public');
кодировка контента может быть и другой, в зависимости от настроек сервера и форума.
Вот типичный пример ответа сервера:
1: <?xml version="1.0" encoding="windows-1251"?> 2: <protocol version="xfr-sources-ru-alpha1"> 3: <error>NO_RIGHTS</error> 4: <MYSQL_QUERY_COUNT>1</MYSQL_QUERY_COUNT> 5: <SCRIPT_EXECUTION_TIME>0.002</SCRIPT_EXECUTION_TIME> 6: </protocol>
Строка 1 содержит объявление XML, включающее версию стандарта XML и кодировку.
Строка 2 содержит корневой элемент protocol единственным атрибутом version, описывающим текущую версию протокола.
Ниже (строки 3,4) содержатся остальные элементы протокола. В описании я буду опускать объявление XML и корневой элемент, т.к. они присутствуют всегда.
Все ошибки описываются в элементе error. Внутри элемента содержится код ошибки. Элемент MYSQL_QUERY_COUNT информативный, и содержит число выполненных запросов скрипта к БД. Элемент SCRIPT_EXECUTION_TIME содержит время выполнения скрипта в микросекундах.
ERROR_NO_ACTION – параметр “action” не передан в POST-запросе
ERROR_NO_LOGIN - параметр “login” не передан в POST-запросе
ERROR_NO_PASSWORD- параметр “password” не передан в POST-запросе
ERROR_LOGIN_FAILED – ошибка авторизации пользователя
ERROR_SESSION_LOGIN_FAILED – ошибка авторизации пользователя через сессию
ERROR_NO_RIGHTS – нет прав для использования данной функции
ERROR_FUNCTION_BLOCKED – функция заблокирована администратором