воскресенье, 18 февраля 2018 г.

Пример использования REST API

Использование REST API со стороны 1с

Вызов

Результат = ПорталПротейНаСервере.WorkerBasic("GET", httpResponse, Отладка);
 

Процедура

&НаСервере
Функция WorkerBasic(ТипЗапроса, httpResponse, Отладка) Export
 //Типи запросов: POST, GET, PUL, DELETE
 companycode = ПорталПротейНаСервере.КодКомпании();
 ПараметрГЕТ = "";
 Если ТипЗапроса="POST" Тогда
  httpResponse = httpResponse; 
  Адрес = "/api/worker/add.worker";
 ИначеЕсли ТипЗапроса="PUT" Тогда 
  httpResponse = httpResponse; 
  Адрес = "/api/worker/update.worker"; 
 ИначеЕсли ТипЗапроса="DELETE" Тогда 
  ПараметрГЕТ = "?externalId=" + httpResponse + "&companyCode=" + CompanyCode; 
  Адрес = "/api/worker/delete.worker"; 
 ИначеЕсли ТипЗапроса="GET" Тогда
  ПараметрГЕТ = "?id=" + httpResponse + "&companyCode=" + CompanyCode; 
  Адрес = "/api/worker/get.worker";
 КонецЕсли;
 
 Попытка 
  АдресСтраницыНаСервере =  Адрес + ПараметрГЕТ; // ЗАПРОС
  ЗащищенноеСоединение=Ложь;
  Таймаут=30; // ждем ответ от сервера 30 сек
  
  СерверПриемник = "newportal.protei:8090"; //имя сервера  
  ЗаголовкиHTTP = Новый Соответствие;
  ЗаголовкиHTTP.Вставить("Content-Type", "application/xml");
  
  SSL =  ?(ЗащищенноеСоединение, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
  НТТР = Новый HTTPСоединение(СерверПриемник, , , , , Таймаут, SSL);
  
  резутатПолучен=Ложь;
  Попытка
   //Формируем HTTP запрос
   ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницыНаСервере, ЗаголовкиHTTP);
   //Устанавливает строку, из которого будет прочитано тело POST-запроса.
   ЗапросHTTP.УстановитьТелоИзСтроки(httpResponse);
   
   //Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
   Если ТипЗапроса="GET" Тогда
    ОтветHTTP = НТТР.ВызватьHTTPМетод("GET",ЗапросHTTP);
   ИначеЕсли ТипЗапроса="POST" Тогда
    ОтветHTTP = НТТР.ВызватьHTTPМетод("POST",ЗапросHTTP);
   ИначеЕсли ТипЗапроса="PUT" Тогда
    ОтветHTTP = НТТР.ВызватьHTTPМетод("PUT",ЗапросHTTP);
   ИначеЕсли ТипЗапроса="DELETE" Тогда
    ОтветHTTP = НТТР.ВызватьHTTPМетод("DELETE",ЗапросHTTP);
   Иначе
    ВызватьИсключение("Неизвестный запрос: "+ТипЗапроса+"!");
   КонецЕсли;
   резутатПолучен=Истина;
   
  Исключение
   ТекстСообщения = НСтр("ru = 'Неудачная попытка соединения с '")  + СерверПриемник + ": " + ОписаниеОшибки();
   Если Отладка = Истина Тогда
    Сообщить("ПЛОХО "+ТекстСообщения); 
   КонецЕсли;
   Логгер(ТипЗапроса, АдресСтраницыНаСервере, "ПЛОХО "+ТекстСообщения);
  КонецПопытки;
  
  ПолученныеДанные="";
   Если Отладка = Истина Тогда
    //Сообщить ("StatusCode = " + ОтветHTTP.КодСостояния); 
   КонецЕсли;
  Если резутатПолучен Тогда
   Если ОтветHTTP.КодСостояния = 200 Тогда                                                                                        
    // теперь можно разбирать ответ
    ЗаголовкиHTTP = ОтветHTTP.Заголовки;
    ЗаголовкиHTTP.Вставить("StatusCode", ОтветHTTP.КодСостояния);
    ПолученныеДанные = ОтветHTTP.ПолучитьТелоКакСтроку();
   Иначе
    Если Отладка = Истина Тогда
     Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
    КонецЕсли;
   КонецЕсли;
   Логгер(ТипЗапроса + АдресСтраницыНаСервере + httpResponse  , "StatusCode = " + ОтветHTTP.КодСостояния, ПолученныеДанные);
  КонецЕсли;
  
  //Возврат ПолученныеДанные;
  //Сообщить(ПолученныеДанные);
  Возврат (ПолученныеДанные);
 Исключение
   ТекстОшибки = ОписаниеОшибки();
  Если Отладка = Истина Тогда
    Сообщить(ОписаниеОшибки()); 
  КонецЕсли;
  Логгер("PUT ", "error",  ТекстОшибки );
 КонецПопытки

КонецФункции

Комментариев нет: