Skip to content
This repository has been archived by the owner on Dec 4, 2019. It is now read-only.

Prominado-ru/prominado.rest

Repository files navigation

prominado.rest

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

Модуль обрабатывает адреса вида http://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']
        ],
    ];
}

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

Код обработчика:

<?php

namespace Prominado\Events;

use Prominado\Rest\Request;
use Prominado\Rest\RestException;

class Rest
{
    public function dataGet(Request $request)
    {
        $userId = $request->getQuery('id');
        
        if(!$userId) {
            throw new RestException('No user_id passed');    
        }
        
        $request->withStatus(200);
        $request->withHeader('X-Token', 'prominado-web-access');

        return ['user' => ['NAME' => 'Prominado']];
    }
    
    public function dataUpdate(Request $request)
    {
        $userId = $request->getQuery('id');
        $fields = $request->getQuery('fields');
        
        if(!$userId) {
            throw new RestException('No user_id passed');    
        }
        
        if(!$fields) {
            throw new 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;
    }
}

Roadmap

  • Метод для проверки авторизации
  • Права доступа (без ограничения по времени)
  • Права доступа (oauth2)

About

Simple REST router for Bitrix projects

Resources

License

Stars

Watchers

Forks

Packages

No packages published