Простой интерфейс для написания api в CMS Bitrix.
Выносит все обработчики в пространство /api/, заставляя разработчиков писать унифицированные обработчики.
Решение для тех кому надоело писать компоненты-обработчики, плодить кучу файлов в doc_root аля в папке /ajax и кто не внедрил себе роутер из laravel/symphony.
- Нативные контроллерые Bitrix
- Контроллеры Laravel/Symphony
Данный модуль для старых проектов или для обратной совместимости.
composer require webpractik/api
- Установка модуля в админке
В процессе установки модуль
- Добавляет в корень DocRoot
api-router.php
- Устанавливает маршрут
/api/
вurlrewrite.php
- Устанавливает компонент в
local/components/webpractik/api/
- Регистрируем маршруты
$arUrlTemplates
в компоненте webpractik:api в local.
class ApiRouterExtended extends \Webpractik\Api\ApiRouter
{
public $sefVariables = [];
public $arUrlTemplates = [
'\MySite\Lk\Response\Resubmit' => 'application/resubmit/',
];
public $arLoadModules = [
'webpractik.main'
];
}
В модули передаем те которые нужны для autoload (@todo fixme)
- Добавляем обработчик \MySite\Lk\Response\Resubmit наследуя его от \Webpractik\Api\Response
Method | Description |
---|---|
public function handler(){} | главная логика |
public function validate() | логика проверок. При |
public $method | GET/POST - ожидаемый тип запроса |
public $request | \Bitrix\Main\HttpRequest https://dev.1c-bitrix.ru/api_d7/bitrix/main/request/index.php |
public $response | \Webpractik\Api\JsonResponse |
{
"status": true,
"errors": []
}
Method | Description |
---|---|
addError($strError) | добавление ошибки |
addParam($name, $value) | добавление параметра в json |
setSuccess/setFail | установка status true/false |
send | json_encode + die() |
sendSuccess | setSuccess + send() |
sendFail($strError) | addError($strError) + send() |
haveErrors() | true |
getErrors() | array |
getResponse() | array |
class FormRegister extends \Webpractik\Api\Response
{
public function handler() {
if (!$this->register()) {
$this->response->sendFail('Ошибка регистрации')
}
$this->response
->addParam('password', $this->password)
->setSuccess()
->send();
}
public function validate() {
if (!$this->request->getPost('email')) {
$this->response->addError('Не введен email');
}
if (!$this->request->getPost('login')) {
$this->response->addError('Не введен логин');
}
return $this->response->haveErrors();
}
}
пример абстрактный, просто чтобы показать возможности