Как реализовать обмен данными между базами 1С с помощью JSON-RPC

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки интеграционных решений часто возникает задача обмена данными между двумя независимыми базами 1С. Хотя 1С не имеет «коробочной» реализации протокола JSON-RPC, мы можем самостоятельно построить такую архитектуру, используя возможности платформы. Давайте разберем, как организовать этот процесс, сделав его надежным и масштабируемым.

Понимание архитектуры взаимодействия

Для того чтобы одна база 1С могла передавать данные другой с помощью JSON-RPC, нам необходимо реализовать модель «Клиент-Сервер». База-сервер (та, из которой мы получаем или в которую отправляем данные) должна предоставлять точку входа. В 1С для этого лучше всего подходят HTTP-сервисы.

Поскольку JSON-RPC — это надстройка над HTTP, работающая по принципу удаленного вызова процедур, нам нужно создать HTTP-сервис, который будет принимать POST-запросы, разбирать их содержимое и вызывать соответствующую логику в коде конфигурации.

Реализация сервера на стороне 1С

На стороне базы-сервера создадим HTTP-сервис. Основным методом работы будет обработка тела запроса. Рассмотрим пошагово, как это организовать:

  1. Создайте новый объект конфигурации HTTP-сервис.
  2. Добавьте шаблон URL и метод, например, POST.
  3. В обработчике метода реализуйте логику получения и парсинга данных.

Для чтения входящего JSON-пакета используйте объект ЧтениеJSON. Рассмотрим пример того, как может выглядеть базовая обработка запроса:


// Пример обработки входящего запроса в HTTP-сервисе
Функция PostМетод(Запрос)
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ТелоЗапроса);
    ДанныеЗапроса = ПрочитатьJSON(Чтение);
    
    // Извлекаем поля JSON-RPC
    Метод = ДанныеЗапроса["method"];
    Параметры = ДанныеЗапроса["params"];
    Идентификатор = ДанныеЗапроса["id"];
    
    // Выполняем диспетчеризацию
    Результат = ВыполнитьЛогику(Метод, Параметры);
    
    // Формируем ответ
    Ответ = Новый HTTPОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СформироватьОтветJSON(Результат, Идентификатор));
    Возврат Ответ;
КонецФункции

Особенности протокола JSON-RPC

При реализации важно строго придерживаться структуры запроса. Стандарт требует наличия следующих полей:

Отправка запроса из базы-клиента

Со стороны второй базы 1С, которая инициирует запрос, мы используем стандартный объект HTTPСоединение и HTTPRequest. Важно правильно передать заголовки, чтобы сервер понял, что пришел JSON-пакет.


// Пример отправки запроса
Соединение = Новый HTTPСоединение("адрес_сервера", 80);
Запрос = Новый HTTPЗапрос("/api/v1/rpc");
Запрос.УстановитьЗаголовок("Content-Type", "application/json");

Данные = Новый Структура;
Данные.Вставить("jsonrpc", "2.0");
Данные.Вставить("method", "ПолучитьДанные");
Данные.Вставить("params", Новый Массив);
Данные.Вставить("id", 1);

Запрос.УстановитьТелоИзСтроки(ЗаписатьJSON(Данные));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Безопасность и обработка ошибок

При построении такого интерфейса не забывайте о безопасности. HTTP-сервисы по умолчанию доступны, поэтому:

Что выбрать: JSON-RPC или альтернативы?

Хотя JSON-RPC дает отличную инкапсуляцию бизнес-логики (вы просто вызываете метод «получить баланс»), иногда проще использовать OData для прямого доступа к данным или обычные HTTP-сервисы как REST API. Выбирайте JSON-RPC, если вы хотите скрыть детали структуры метаданных и предоставить строго определенный набор «процедур» для внешней системы. В противном случае, классический REST будет более стандартизированным и легким в поддержке решением.

← На главную