CRM4DEV-799 - Получение подробных данных проблемы... СТАТУС
📄 Описание 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
- Назначение: Получить список всех доступных сервисов.
- Авторизация: Полная, но с флагом
Истина— возможно, пропускает некоторые проверки. - Вызов:
RestAPI_Методы.СписокСервисов(Запрос) - Пример ответа:
{ "success": true, "data": [ { "НаименованиеСервиса": "CRM", "Права": ["read", "write"] }, { "НаименованиеСервиса": "ERP", "Права": ["read"] } ] }
✅ many_licenses
- Назначение: Получить количество активных лицензий.
- Авторизация: Стандартная.
- Вызов:
RestAPI_Методы.КоличествоЛицензий(Запрос) - Пример ответа:
{ "success": true, "data": 150 }
❌ Другие значения ИмяМетода
- Возвращается ошибка
404 Method not found.
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
- Назначение: Изменить данные внешнего пользователя (например, email, имя, права).
- Авторизация: Расширенная (
,,,Истина) — требуется высокий уровень доступа. - Вызов:
RestAPI_Методы.ИзменитьВнешнегоПользователя(Запрос) - Ожидаемый формат тела запроса (JSON):
{ "UserID": "123", "Email": "new@example.com", "ФИО": "Иванов Иван" } - Ответ:
200 OK— успешно.400 Bad Request— неверный формат.403 Forbidden— нет прав.
5. Используемые общие модули
| Модуль | Функция | Назначение |
|---|---|---|
ОбщегоНазначенияHTTPСервисы | ПроверкаАвторизации() | Проверка токена, ключа, роли пользователя |
ЗаписьВЖурнал() | Аудит действий пользователя | |
RestAPI_Методы | СписокСервисов() | Возвращает список сервисов с правами |
КоличествоЛицензий() | Возвращает число активных лицензий | |
ИзменитьВнешнегоПользователя() | Обновляет данные пользователя | |
СтрокаОтвета() | Формирует JSON-ответ с данными или ошибкой |
6. Механизм авторизации
Обе функции используют единый механизм:
РезультатПроверки = ОбщегоНазначенияHTTPСервисы.ПроверкаАвторизации(Запрос, ...);
Он проверяет:
- Наличие заголовка
Authorization(Bearer-токен или Basic Auth). - Валидность токена/пароля.
- Принадлежность пользователя к системе.
- Наличие необходимых прав.
⚠️ При
Истинав последнем параметре — могут разрешаться действия для администраторов или интеграций.
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 — это ключевые точки интеграции для управления сервисами и пользователями. Они:
- Безопасны (авторизация обязательна).
- Гибки (расширяемы через
ИмяМетода). - Хорошо документированы (единый формат ответа).
✅ Документ подготовлен так, чтобы новый программист мог:
- Понять логику маршрутизации.
- Безопасно добавить новые методы.
- Интегрировать с внешними системами.