Создание API
Для реализации API на фреймворке HLEB предусмотрен набор трейтов, упрощающих валидацию и обработку данных в контроллерах (там, где эти трейты применены).Установка библиотеки github.com/phphleb/api-multitool через Composer:
или скачать библиотеку в папку vendor/phphleb/api-multitool.
Подключение трейта BaseApiTrait (представляющего собой набор трейтов)
Сначала нужно создать родительский класс BaseApiActions для контроллеров с API:
После этого во всех наследуемых от этого класса контроллерах появятся методы от каждого трейта в наборе:
ApiHandlersTrait
Трейт ApiHandlersTrait содержит несколько методов, которые могут пригодиться для обработки возвращаемых данных API. Это не значит, что его методы 'present' и 'error' формируют окончательный ответ, они возвращают именованные массивы, которые можно использовать по собственному более сложному стандарту. Пример в методе контроллера:ApiMethodWrapperTrait
Осуществляет перехват системных ошибок и вывод их в метод 'error' предыдущего трейта ApiHandlersTrait или иного, предназначенного для этой цели (если упомянутый трейт не используется). Если вызван метод контроллера, то для правильной обработки его ошибок необходимо добавить префикс 'action', как, например, для предыдущего примера контроллера роутинг будет примерно таким:ApiPageManagerTrait
Реализует довольно частно необходимую функцию пагинации выводимых данных. Добавляет метод 'getPageInterval', который преобразует данные пагинации в более удобный вид. При этом вычисляется начальное значение выборки, что удобно для работы с базой данных.ApiRequestDataManagerTrait
Добавляет метод 'check', при помощи которого можно проверить данные одного массива при помощи условий проверки из другого. Использование этого трейта добавляет возможность проверить любые входящие данные, преобразованные в массив, будь это параметры POST-запроса или JSON Body. Существует перечень возможных условий, при помощи которых можно проверить данные, они составляются разработчиком. Например (Request::getJsonBodyList для фреймворка HLEB возвращает массив JSON Body):Список возможных типов ('type' - обязательно на первом месте или после required):
string - проверяет наличие строкового значения, ограничения могут быть minlength и maxlength.
float - проверка на тип float(double), ограничения могут быть max и min.
int - проверка на тип int(integer), ограничения могут быть max и min.
regex - проверка по регулярному выражению, например 'regex:[0-9]+'.
fullregex - проверка по полному регулярному выражению, аналогично 'fullregex:/^[0-9]+$/i', обязательно обрамлённое слешами, может содержать символы : и |, в отличие от более простого regex.
bool - проверка на булево значение, только true или false.
null - проверка на null как правильное значение.
void - проверка на пустую строку как правильное значение.
Тип для перечислений:
enum - поиск среди возможных значений, например 'enum:1,2,3,4,south,east,north,west'. Проверка на равенство не строгая, поэтому правильно будет как 4, так и '4', для точного соответствия лучше сопроводить проверкой на тип.
Можно добавить два и более типов, они будут проверены на все общие условия включительно, например type:string,null,void|minlen:5 - будет означать, что проверяется строка, минимум 5 символов или пустая, или же значение null, во всех остальных случаях возвращает false как результат не пройденной проверки валидации.
Также можно проверить массив в поле со списком стандартных полей массива (будут проверяться по единому шаблону):