Обзор API IO7
Внимание
Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!
IO7 предоставляет трёхуровневую архитектуру API: CoreApi (базовый класс), CrudApi (CRUD-операции) и ApiResult (формирование ответов).
Требования: PHP ^8.2, Illuminate (Laravel 13)
Архитектура
IO\Api\CoreApi ← базовый класс, жизненный цикл action
│
└── IO\Api\CrudApi ← CRUD-операции (search, create, save, delete)
│
└── App\Api\YourApi ← ваш API
Ключевые классы
CoreApi
Базовый класс для всех API. Реализует паттерн action-методов через магический метод __callStatic().
Жизненный цикл action:
actionGetData($params)
│
├── onBefore() ← до выполнения
├── onInit() ← инициализация (можно прервать)
├── doGetData() ← основная логика
└── onAfter() ← после выполнения
Свойства:
| Свойство | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$action | string | '' | Нет | Имя текущего action |
$params | array | [] | Нет | Параметры action |
$result | ApiResult | — | Да | Объект результата |
CrudApi
Расширяет CoreApi готовыми CRUD-методами:
| Метод | Описание |
|---|---|
doSearch() | Поиск записей |
doGetByID() | Получение по ID |
doCreate() | Создание записи |
doSave() | Обновление записи |
doDelete() | Мягкое удаление |
ApiResult
Объект для формирования ответов API. Реализует ArrayAccess.
Методы:
| Метод | Описание |
|---|---|
showSuccess(array $data) | Ответ об успехе |
showResult(array $data, string $error, int $code) | Ответ с ошибкой |
showException(array $data, \Throwable $e) | Ответ с исключением |
showRender(string $template, array $params) | Рендер Twig шаблона |
errorByCode(int $code) | Ошибка по коду |
errorNoPermissions() | Ошибка «нет прав» |
assign(array $data) | Присвоение данных |
toArray() | Конвертация в массив |
Пример showRender:
public function doRender($result, $params)
{
$result->showRender('@app/example.twig', [
'name' => 'Alexey',
]);
}
Маршрутизация API
API вызываются через IO\Core::callAction() или через HTTP endpoint /entity/:entity.
// Локальный вызов
$result = \IO\Core::callAction('app.model.user.search', [
'filter' => ['status' => 'active'],
]);
// HTTP вызов
// GET /entity/app.model.user.search?status=active
// POST /entity/app.model.user.search с body: {"filter": {"status": "active"}}
Формат ответа
Все API возвращают массив (или ApiResult, который конвертируется в массив) с полями:
{
"error_code": 1,
"error_str": "",
"items": [...],
"total": 42
}
Константы ошибок API
| Константа | Код | Описание |
|---|---|---|
EIO_OK | 1 | Успех |
EIO_FALSE | 0 | Общая ошибка |
EIO_UNKNOWN | -1 | Неизвестная ошибка |
EIO_NOTFOUND_OBJECT | -8 | Объект не найден |
EIO_NO_PERMISSIONS | -9 | Нет прав |
EIO_DENY | -11 | Доступ запрещён |