Prominado: REST

0

Разработчик: Prominado

Установлено: 100 - 499

Обновлено: 01.02.2018

Адаптирован под мобильные устройства

Совместим с редакциями Битрикс: «Первый сайт» / «Старт» / «Стандарт» / «Малый бизнес» / «Бизнес» / «Энтерпрайз» / «Корпоративный портал» /

Смотреть демо

Модуль для организации REST API в проектах на 1С-Битрикс.

Возможности модуля:
- Создание методов API с помощью событий
- Вывод данных в формате json/xml
- Ограничение методов API по HTTP-методам

Планы на будущее:
- Добавление прав доступа с бесконечными ключами
- Добавление OAuth2 протокола

Модуль обрабатывает адреса вида
https://my_website.ru/rest/method.name

Чтобы зарегистрировать обработчик, необходимо зарегистрировать обработчик:
<?php

$event = \Bitrix\Main\EventManager::getInstance();
$event->addEventHandler("prominado.rest", "onRestMethodBuildDescription", "restServiceDescription");

function restServiceDescription()
{
    return [
        "data.get" => [
            "allow_methods" => [],
            "callback" => ["\\Prominado\\Events\\Rest", "dataGet"]
        ],
        "data.update" => [
            "allow_methods" => ["POST"],
            "authenticator" => ["\\Prominado\\Events\\Rest", "isAuthorized"],
            "callback" => ["\\Prominado\\Events\\Rest", "dataUpdate"]
        ],
    ];
}

Указанные выше методы будут доступны по адресам:
https://my_website.ru/rest/data.get
и
https://my_website.ru/rest/data.update 

Код обработчика:
<?php

namespace Prominado\Events;

class Rest
{
    public function dataGet(\Prominado\Rest\Request $request)
    {
        $userId = $request->getQuery("id");

        if(!$userId) {
            throw new \Prominado\Rest\RestException("No user_id passed"); 
        }

        $request->withStatus(200);
        $request->withHeader("X-Token", "prominado-web-access");

        return ["user" => ["NAME" => "Prominado"]];
    }

    public function dataUpdate(\Prominado\Rest\Request $request)
    {
        $userId = $request->getQuery("id");
        $fields = $request->getQuery("fields");

        if(!$userId) {
            throw new \Prominado\Rest\RestException("No user_id passed"); 
        }

        if(!$fields) {
            throw new \Prominado\Rest\RestException("No fields passed"); 
        }

        $request->withStatus(200);
        $request->withHeader("X-Token", "prominado-web-access");

        return ["user" => ["NAME" => "Prominado"]];
    }

    public function isAuthorized(Request $request) 
    {
        $server = $request->getServer();
    
        preg_match("/Bearer\s(.*)/", $server["REMOTE_USER"], $matches);
        if ($matches[1]) {
            return true;
        }

        return false;
    }
}
Решение предоставляется "как есть". Техническая поддержка по решению не предоставляется.

Пожелания и замечания можно писать на panteleev@prominado.ru, либо пулл-реквестить на гитхабе - https://github.com/Prominado-ru/prominado.rest