Skip to content
steelice edited this page Dec 24, 2014 · 5 revisions

API

Движок теперь 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

Алгоритм выбора модуля

  1. Пытаемся загрузить файл site/api/{API_VER}/_router.php Если загрузка удачная, пытаемся найти подходящее правило (rule) для данного пути. Если оно найдено — оно выполняется в приоритете, если выполнено быть не может — возвращается 503 ошибка сервера. В таком случае надо либо поправить файл роутинга, либо файл модуля который отвечает за выполнение этого правила.

  2. Если router.php не найден или в нём не найдено правил, отвечающие за шаблон текущего пути, пытаемся найти контроллер по формуле: Если в site/api/{API_VER} есть папка с именем модуля (часть УРЛ, идущая за версией), то пытаемся загрузить site/api/{API_VER}/{MODULE}/{METHOD}.php (при этом {METHOD} будет index если пуст). Если папки нет, то просто site/api/{API_VER}/{MODULE}.php

  3. Если таких файлов не найдено, то будут использованы все шаги что и с /site, но выполняемые относительно /{ENGINE}/api/{API_VER}/.

  4. Если такого будет не найдено, будет поиск по /{ENGINE}/api/{API_VER}/ по файловой системе (как в п.2)

  5. Далее, если версия не 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();

Clone this wiki locally