📄 Описание HTTP-методов: serviceGET и servicePOST

1. Общее назначение

Функции serviceGET и servicePOST — это точки входа REST API для работы с сервисами и внешними пользователями. Они позволяют:

🔐 Все методы требуют аутентификации и работают в рамках системы авторизации через ОбщегоНазначенияHTTPСервисы.


2. Маршрутизация

МетодURLНазначение
GET/rest/service?ИмяМетода=list_appПолучить список сервисов
GET/rest/service?ИмяМетода=many_licensesПолучить количество лицензий
POST/rest/service?ИмяМетода=change_userИзменить данные внешнего пользователя

3. Функция: serviceGET(Запрос)

🔹 Назначение

Обработка GET-запросов к ресурсу /rest/service для получения информации о сервисах и лицензиях.

🔹 Алгоритм работы

Функция serviceGET(Запрос)
    ИмяМетода = Запрос.ПараметрыURL["ИмяМетода"];
    
    // Особая проверка для list_app (возможно, упрощённая авторизация)
    Если ИмяМетода = "list_app" Тогда
        РезультатПроверки = ОбщегоНазначенияHTTPСервисы.ПроверкаАвторизации(Запрос, Истина);
    Иначе
        РезультатПроверки = ОбщегоНазначенияHTTPСервисы.ПроверкаАвторизации(Запрос,,,Истина);
    КонецЕсли;
    
    Если Не РезультатПроверки.Успешно Тогда
        // Ответ 405 при ошибке авторизации
        ТелоОтвета = RestAPI_Методы.СтрокаОтвета(Неопределено, Ложь, РезультатПроверки.Ошибка);
        Ответ = Новый HTTPСервисОтвет(405);
        Ответ.УстановитьТелоИзСтроки(ТелоОтвета);
        Возврат Ответ;
    КонецЕсли;
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    Если ИмяМетода = "list_app" Тогда
        Ответ = RestAPI_Методы.СписокСервисов(Запрос);
    ИначеЕсли ИмяМетода = "many_licenses" Тогда
        Ответ = RestAPI_Методы.КоличествоЛицензий(Запрос);
    Иначе
        ТелоОтвета = RestAPI_Методы.СтрокаОтвета(Неопределено, Ложь, "Method not found.");
        Ответ.КодСостояния = 404;
        Ответ.УстановитьТелоИзСтроки(ТелоОтвета);
    КонецЕсли;
    
    Возврат Ответ;
КонецФункции

🔹 Поддерживаемые методы

list_app

many_licenses

❌ Другие значения ИмяМетода


4. Функция: servicePOST(Запрос)

🔹 Назначение

Обработка POST-запросов к ресурсу /rest/service для изменения данных внешних пользователей.

🔹 Алгоритм работы

Функция servicePOST(Запрос)
    ИмяМетода = Запрос.ПараметрыURL["ИмяМетода"];
    
    // Авторизация с флагом "Истина" — возможно, расширенные права
    РезультатПроверки = ОбщегоНазначенияHTTPСервисы.ПроверкаАвторизации(Запрос,,,Истина);
    
    Если Не РезультатПроверки.Успешно Тогда
        ТелоОтвета = RestAPI_Методы.СтрокаОтвета(Неопределено, Ложь, РезультатПроверки.Ошибка);
        Ответ = Новый HTTPСервисОтвет(405);
        Ответ.УстановитьТелоИзСтроки(ТелоОтвета);
        Возврат Ответ;
    КонецЕсли;
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    Если ИмяМетода = "change_user" Тогда
        Ответ = RestAPI_Методы.ИзменитьВнешнегоПользователя(Запрос);
    Иначе
        ТелоОтвета = RestAPI_Методы.СтрокаОтвета(Неопределено, Ложь, "Method not found.");
        Ответ.КодСостояния = 404;
        Ответ.УстановитьТелоИзСтроки(ТелоОтвета);
    КонецЕсли;
    
    Возврат Ответ;
КонецФункции

🔹 Поддерживаемый метод

change_user


5. Используемые общие модули

МодульФункцияНазначение
ОбщегоНазначенияHTTPСервисыПроверкаАвторизации()Проверка токена, ключа, роли пользователя

ЗаписьВЖурнал()Аудит действий пользователя
RestAPI_МетодыСписокСервисов()Возвращает список сервисов с правами

КоличествоЛицензий()Возвращает число активных лицензий

ИзменитьВнешнегоПользователя()Обновляет данные пользователя

СтрокаОтвета()Формирует JSON-ответ с данными или ошибкой

6. Механизм авторизации

Обе функции используют единый механизм:

РезультатПроверки = ОбщегоНазначенияHTTPСервисы.ПроверкаАвторизации(Запрос, ...);

Он проверяет:

⚠️ При Истина в последнем параметре — могут разрешаться действия для администраторов или интеграций.


7. Формат ответа

Все методы возвращают JSON в формате:

{
  "success": true,
  "data": { ... },
  "error": ""
}

или при ошибке:

{
  "success": false,
  "data": null,
  "error": "Wrong authorization"
}

Формирование выполняется через:

ТелоОтвета = RestAPI_Методы.СтрокаОтвета(Данные, Успешно, Ошибка);

8. Что уже реализовано

ФункцияРеализованоКомментарий
serviceGETПоддержка list_app, many_licenses
servicePOSTПоддержка change_user
АвторизацияЧерез общий модуль
Формирование JSONЕдиный шаблон ответа
Обработка ошибокПерехват и возврат 405/404
АудитЧерез ЗаписьВЖурнал()

9. Рекомендации по доработке

НаправлениеРекомендация
Добавить OPTIONSРеализовать serviceOPTIONS() для CORS.
Поддержка PATCH/DELETEДля гибкого управления пользователями.
Валидация входных данныхПроверять структуру JSON перед обработкой.
Логирование запросовЗаписывать в ЖурналОбменаAPI.
Кэширование list_appЧтобы снизить нагрузку на БД.
Поддержка пагинацииЕсли список сервисов станет большим.

10. Примеры использования

🔹 Получить список сервисов

GET /rest/service?ИмяМетода=list_app
Authorization: Bearer abc123

🔹 Получить количество лицензий

GET /rest/service?ИмяМетода=many_licenses
Authorization: Bearer abc123

🔹 Изменить пользователя

POST /rest/service?ИмяМетода=change_user
Authorization: Bearer admin_token
Content-Type: application/json

{
  "UserID": "U-789",
  "Email": "updated@company.com",
  "ФИО": "Петров Петр Петрович"
}

11. Заключение

Функции serviceGET и servicePOST — это ключевые точки интеграции для управления сервисами и пользователями. Они:

Документ подготовлен так, чтобы новый программист мог: