-
Notifications
You must be signed in to change notification settings - Fork 1
Движок теперь API-ориентирован, и всё крутится вокруг API. Запросы к апи идут по схеме:
/api/{MODULE}/{MODULE_PARAMS}
На любой запрос ответ будет в таком формате:
{
meta: {
status: 200
},
error: { message: 'Error message', code: 404 },
data: { },
user: { }
}
Статусы могут быть только таки: 200 — обычный ответ, 503 — серьезная поломка на сервере, 401 — необходима аутентификация.
Даже при ответе обычной ошибки (что-то не найдено или ошибка в логике или неправильный запрос) meta.status будет 200, но при этом data будет пустая, а ошибка будет описана в объекте error
-
Пытаемся загрузить файл site/api/{API_VER}/_router.php Если загрузка удачная, пытаемся найти подходящее правило (rule) для данного пути. Если оно найдено — оно выполняется в приоритете, если выполнено быть не может — возвращается 503 ошибка сервера. В таком случае надо либо поправить файл роутинга, либо файл модуля который отвечает за выполнение этого правила.
-
Если router.php не найден или в нём не найдено правил, отвечающие за шаблон текущего пути, пытаемся найти контроллер по формуле: Если в site/api/{API_VER} есть папка с именем модуля (часть УРЛ, идущая за версией), то пытаемся загрузить site/api/{API_VER}/{MODULE}/{METHOD}.php (при этом {METHOD} будет index если пуст). Если папки нет, то просто site/api/{API_VER}/{MODULE}.php
-
Если таких файлов не найдено, то будут использованы все шаги что и с /site, но выполняемые относительно /{ENGINE}/api/{API_VER}/.
-
Если такого будет не найдено, будет поиск по /{ENGINE}/api/{API_VER}/ по файловой системе (как в п.2)
-
Далее, если версия не v1, будет поиск как и в пункте 3 и 4, но принудительно с {API_VER}=v1
Роутер может вернуть три необязательных параметра:
- file - будет подключен файл по адресу {site|ENGINE}/api/{API_VER}/{FILE}.
- module_name - в подключенном модуле будет использован класс с именем {MODULE_NAME}
- method_name - в инициализированном объекте будет использован метод ${MODULE_NAME}->{METHOD_NAME}($params);
Если любой из этих параметров будет отсутствовать, они будут вычисленны по следующему алгоритму:
- file: будет поиск по {API_VER}/{MODULE}/{METHOD|or index}.php, {API_VER}/{MODULE}.php
- module_name: если есть папка {MODULE} и задан {METHOD}, то api_{MODULE}{METHOD}, иначе api{MODULE}
- method_name: если используется формат api_{MODULE}{METHOD}, то либо $(api{MODULE}{METHOD})->{SUB_METHOD}(); (если метод {SUB_METHOD} существует, и {SUB_METHOD} задан) либо $(api{MODULE}{METHOD})->Run();
Если используется формат api{MODULE} то пытаемся вызвать
$(api_{MODULE})->{METHOD}(); если такого метода нет, то $ (api_{MODULE})->Run();