serviceGET и servicePOSTФункции serviceGET и servicePOST — это точки входа REST API для работы с сервисами и внешними пользователями. Они позволяют:
🔐 Все методы требуют аутентификации и работают в рамках системы авторизации через
ОбщегоНазначенияHTTPСервисы.
| Метод | URL | Назначение |
|---|---|---|
GET | /rest/service?ИмяМетода=list_app | Получить список сервисов |
GET | /rest/service?ИмяМетода=many_licenses | Получить количество лицензий |
POST | /rest/service?ИмяМетода=change_user | Изменить данные внешнего пользователя |
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Истина — возможно, пропускает некоторые проверки.RestAPI_Методы.СписокСервисов(Запрос){
"success": true,
"data": [
{
"НаименованиеСервиса": "CRM",
"Права": ["read", "write"]
},
{
"НаименованиеСервиса": "ERP",
"Права": ["read"]
}
]
}
many_licensesRestAPI_Методы.КоличествоЛицензий(Запрос){
"success": true,
"data": 150
}
ИмяМетода404 Method not found.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,,,Истина) — требуется высокий уровень доступа.RestAPI_Методы.ИзменитьВнешнегоПользователя(Запрос){
"UserID": "123",
"Email": "new@example.com",
"ФИО": "Иванов Иван"
}
200 OK — успешно.400 Bad Request — неверный формат.403 Forbidden — нет прав.| Модуль | Функция | Назначение |
|---|---|---|
ОбщегоНазначенияHTTPСервисы | ПроверкаАвторизации() | Проверка токена, ключа, роли пользователя |
ЗаписьВЖурнал() | Аудит действий пользователя | |
RestAPI_Методы | СписокСервисов() | Возвращает список сервисов с правами |
КоличествоЛицензий() | Возвращает число активных лицензий | |
ИзменитьВнешнегоПользователя() | Обновляет данные пользователя | |
СтрокаОтвета() | Формирует JSON-ответ с данными или ошибкой |
Обе функции используют единый механизм:
РезультатПроверки = ОбщегоНазначенияHTTPСервисы.ПроверкаАвторизации(Запрос, ...);
Он проверяет:
Authorization (Bearer-токен или Basic Auth).⚠️ При
Истинав последнем параметре — могут разрешаться действия для администраторов или интеграций.
Все методы возвращают JSON в формате:
{
"success": true,
"data": { ... },
"error": ""
}
или при ошибке:
{
"success": false,
"data": null,
"error": "Wrong authorization"
}
Формирование выполняется через:
ТелоОтвета = RestAPI_Методы.СтрокаОтвета(Данные, Успешно, Ошибка);
| Функция | Реализовано | Комментарий |
|---|---|---|
serviceGET | ✅ | Поддержка list_app, many_licenses |
servicePOST | ✅ | Поддержка change_user |
| Авторизация | ✅ | Через общий модуль |
| Формирование JSON | ✅ | Единый шаблон ответа |
| Обработка ошибок | ✅ | Перехват и возврат 405/404 |
| Аудит | ✅ | Через ЗаписьВЖурнал() |
| Направление | Рекомендация |
|---|---|
| Добавить OPTIONS | Реализовать serviceOPTIONS() для CORS. |
| Поддержка PATCH/DELETE | Для гибкого управления пользователями. |
| Валидация входных данных | Проверять структуру JSON перед обработкой. |
| Логирование запросов | Записывать в ЖурналОбменаAPI. |
Кэширование list_app | Чтобы снизить нагрузку на БД. |
| Поддержка пагинации | Если список сервисов станет большим. |
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",
"ФИО": "Петров Петр Петрович"
}
Функции serviceGET и servicePOST — это ключевые точки интеграции для управления сервисами и пользователями. Они:
ИмяМетода).✅ Документ подготовлен так, чтобы новый программист мог:
- Понять логику маршрутизации.
- Безопасно добавить новые методы.
- Интегрировать с внешними системами.