Реализация в 1С архитектуры RESTful

09.12.16

Интеграция - Внешние источники данных

Пример реализации запросов с 1С к серверу, по принципу RESTful.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример реализцации работы RESTful API
.zip 4,83Kb ver:1.0.0
9
9 Скачать (1 SM) Купить за 1 850 руб.

REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP.

Всё взаимодействие с сервером сводится к следующим операциям:

  1. получение данных с сервера (обычно в формате JSON, или XML)
  2. добавление новых данных на сервер
  3. модификация существующих данных на сервере
  4. удаление данных на сервере

Таким образом, данные HTTP-запросы будут иметь различную смысловую нагрузку в REST:

  • GET /object - Получаем данные Объекта
  • POST /object - Добавляем Объект
  • PUT /object - Изменяем(модифицируем) Объект
  • DELETE /object - Удаляем Объект

Т.е. :

  1. GET-запрос /rest/users - получение информации о всех пользователях
  2. GET-запрос /rest/users/125 - получение информации о пользователе с id=125
  3. POST-запрос /rest/users - добавление нового пользователя
  4. PUT-запрос /rest/users/125 - изменение информации о пользователе с id=125
  5. DELETE-запрос /rest/users/125 - удаление пользователя с id=125

Примерный код функции отправки запроса из 1С:

Функция ЗапросHTTP(ТипЗапроса)
	//ТипЗапроса: POST, GET, PUL, DELETE
	
	ПараметрГЕТ = "";
	ТелоPOSTЗапроса = "";
	Если ТипЗапроса="POST" или ТипЗапроса="PUT" Тогда
		ТелоPOSTЗапроса = "parametr5=5&parametr6=6"; // POST (+для PUT)
	ИначеЕсли ТипЗапроса="GET" Тогда
		ПараметрГЕТ = "?parametr1=1&parametr2=2"; // GET
	КонецЕсли;
	АдресСтраницыНаСервере = "/test_restful.php"+ПараметрГЕТ; // ЗАПРОС
	
	ЗащищенноеСоединение=Ложь;
	Таймаут=30; // ждем ответ от сервера 30 сек
	
	СерверПриемник = "domainname.ru"; //имя сервера без протокола (http) и порта
	
	ЗаголовкиHTTP = Новый Соответствие;
	ЗаголовкиHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
	
	SSL =  ?(ЗащищенноеСоединение, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
	НТТР = Новый HTTPСоединение(СерверПриемник, , , , , Таймаут, SSL);
	
	резутатПолучен=Ложь;
	Попытка
		//Формируем HTTP запрос
		ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницыНаСервере, ЗаголовкиHTTP);
		//Устанавливает строку, из которого будет прочитано тело POST-запроса.
		ЗапросHTTP.УстановитьТелоИзСтроки(ТелоPOSTЗапроса);
		
		//Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
		Если ТипЗапроса="GET" Тогда
			ОтветHTTP = НТТР.ВызватьHTTPМетод("GET",ЗапросHTTP);
		ИначеЕсли ТипЗапроса="POST" Тогда
			ОтветHTTP = НТТР.ВызватьHTTPМетод("POST",ЗапросHTTP);
		ИначеЕсли ТипЗапроса="PUT" Тогда
			ОтветHTTP = НТТР.ВызватьHTTPМетод("PUT",ЗапросHTTP);
		ИначеЕсли ТипЗапроса="DELETE" Тогда
			ОтветHTTP = НТТР.ВызватьHTTPМетод("DELETE",ЗапросHTTP);
		Иначе
			ВызватьИсключение("Неизвестный запрос: "+ТипЗапроса+"!");
		КонецЕсли;
		резутатПолучен=Истина;
	Исключение
		ТекстСообщения = НСтр("ru = 'Неудачная попытка соединения с '")  + СерверПриемник + ": " + ОписаниеОшибки();
		Сообщить("ПЛОХО "+ТекстСообщения);
	КонецПопытки;
	
	ПолученныеДанные="";
	
	Если резутатПолучен Тогда
		Если ОтветHTTP.КодСостояния = 200 Тогда
			// теперь можно разбирать ответ
			ЗаголовкиHTTP = ОтветHTTP.Заголовки;
			ЗаголовкиHTTP.Вставить("StatusCode", ОтветHTTP.КодСостояния);
			ПолученныеДанные = ОтветHTTP.ПолучитьТелоКакСтроку();
		Иначе
			Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
		КонецЕсли;
	КонецЕсли;
	
	//Возврат ПолученныеДанные;
	Сообщить(ПолученныеДанные);
	
КонецФункции

Пример серверной части принимающей запросы от 1С:

if($_SERVER['REQUEST_METHOD'] == 'PUT') {
    $_PUT = array();
    $putdata = file_get_contents('php://input');
    $exploded = explode('&', $putdata);
    foreach($exploded as $pair) {
        $item = explode('=', $pair);
        if(count($item) == 2) {
            $_PUT[urldecode($item[0])] = urldecode($item[1]);
        }
    }

    echo "PUT\n";
    var_dump($_PUT);
} else if($_SERVER['REQUEST_METHOD'] == 'DELETE') {
    echo "DELETE\n";
    // параметры не нужны!
    //var_dump($_DELETE);
} else if($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo "POST\n";
    var_dump($_POST);
} else if($_SERVER['REQUEST_METHOD'] == 'GET') {
    echo "GET\n";
    var_dump($_GET);
} else {
    echo "BAD\n";
}

В файле приведен весь данный код, и собран в рабочий пример. Архив содержит два файла: обработка для 1С - выступающая в качестве клиента и обработка для сервера на php.

restful rest restful api rest api

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    23108    25    49    

39

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    26587    26    1    

28

Внешние источники данных Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Готовая интеграция для управляемых форм. Встраивается в вашу 1С как расширение. Реализует автоматический обмен данными между 1С (1С:Фитнес клуб и аналогов) и СКУД RusGuard, автоматизирует бизнес-процессы по созданию и учету сотрудников в СКУД. Значительно упрощает работу специалистов отдела кадров и отдела безопасности: избавляет от двойного ввода информации в 1С и СКУД.

94999 руб.

11.07.2024    1332    1    0    

3

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    48729    98    106    

70

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Налоговый учет Платные (руб)

Представлена обработка для импорта документов из розничной программы учета товара в торговых точках и аптеках, необходимых для ведения бухгалтерского и налогового учёта, в Бухгалтерию 3.0. При загрузке данных в бухгалтерию переносятся документы поступлений, реализации, возвратов и перемещений в торговых точках и формируются все бухгалтерские и налоговые отчеты с учетом этих документов для любой системы налогообложения. Обработка позволяет загрузить данные из ПО ТрейдФарм. Имеются варианты для других розничных программ (ПО Manuscript Solution, Е-Фарма и S-Market).

18000 руб.

09.04.2020    18711    13    8    

9
Оставьте свое сообщение