Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

HTTP-сервисы, передача данных

HTTP-сервисы, передача данных
Я
   Paimiji
 
19.01.21 - 12:34
Здравствуйте. Пытаюсь научиться работать с HTTP-сервисами. Подскажите, если я хочу по http обратиться к своей базе и получить данные из регистра, то я должен в 1С создать Шаблон URL, у которого определить метод GET? И потом с помощью этого метода обращаться к базе и получать данные?
И если я потом захочу отдать какие то данные в ответ, то какой метод http для этого необходимо определять?
   ДенисЧ
 
1 - 19.01.21 - 12:38
   butterbean
 
2 - 19.01.21 - 12:42
(0) по получению данных - да, порядок такой.
что значит "отдать какие то данные в ответ"? если это в смысле в 1С что-то записать в базу, то тогда POST-запрос, хотя в принципе можно в базу и по get-запросу записи делать
   Paimiji
 
3 - 19.01.21 - 12:49
(2) "отдать какие то данные в ответ" я подразумеваю, что я подключился к своей базе по get запросу и хочу отправить в ответ какой нибудь набор данных: выборку, таблицу значений или еще что нибудь
   butterbean
 
4 - 19.01.21 - 13:08
(3) ну дык в теле ответа на свой get-запрос ты и отправляй что хочешь, зачем еще какой-то запрос определять?
   BaZZiL
 
5 - 19.01.21 - 13:30
(3)
когда "подключился к базе по get запросу", это и означает что в ответ нужно отправить какие-то данные, которые надо в этом ответе сформировать

Например, создал URLшаблон GET "НоменклатураПоШтрихкоду" с адресом /goods/{BarCode}
В шаблоне создал метод GET c обработчиком НоменклатураGET

Функция НоменклатураGET(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Штрихкод = Запрос.ПараметрыURL.Получить("BarCode");
    
    ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку(ПараметрыЗаписиJSON);
        
    Номенклатура = НайтиНоменклатуруПоШтрихкоду(Штрихкод);
    Если Номенклатура <> Неопределено Тогда
        ДанныеОтвет = Новый Структура;
        ДанныеОтвет.Вставить("Номенклатура",Номенклатура.Наименование);
    Иначе
        Ответ = Новый HTTPСервисОтвет(404);
        ДанныеОтвет ="Номенклатура со штрихкодом "+Штрихкод+" не найдена";
    КонецЕсли;

    ЗаписатьJSON(Запись, ДанныеОтвет);
    Результат = Запись.Закрыть();
    Ответ.УстановитьТелоИзСтроки(Результат);
    Ответ.Заголовки.Вставить("Content-type", "application/json");
    Возврат Ответ;
КонецФункции
   Paimiji
 
6 - 19.01.21 - 13:32
(4) (5) Ага, понял, спасибо огромное! Можно еще небольшой вопрос? У меня получилось написать GET и получить строку. Теперь хочу попробовать передать массив, но когда я прописываю

(КодыТест - это массив, заполненный)
Результат = КодыТест;
Ответ.УстановитьТелоИзСтроки(Результат,КодировкаТекста.UTF8);    
Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");

То получаю просто слово "Массив" в результате. А как сделать, чтобы значения массива передались?
   BaZZiL
 
7 - 19.01.21 - 13:37
РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        ТЗ = РезультатЗапроса.Выгрузить();
    Иначе    
        Ответ = Новый HTTPСервисОтвет(404);
        Ответ.УстановитьТелоИзСтроки("бла-бла-бла не найдено");
        Ответ.Заголовки.Вставить("Content-type", "application/json");
        Возврат Ответ;
    КонецЕсли;

    ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку(ПараметрыЗаписиJSON);
    
    ТабНакл = Новый Массив;
    Для Каждого Стр Из ТЗ Цикл
        Накл = Новый Структура;
        Накл.Вставить("Товар",Товар);
        Накл.Вставить("Количество",Количество);
        ТабНакл.Добавить(Накл);
    КонецЦикла;    
    ЗаписатьJSON(Запись,ТабНакл);
    Результат = Запись.Закрыть();
    Ответ.УстановитьТелоИзСтроки(Результат);
    Ответ.Заголовки.Вставить("Content-type", "application/json");
    Возврат Ответ;
   BaZZiL
 
8 - 19.01.21 - 13:40
Разумеется

Стр.Товар
Стр.Количество
   Paimiji
 
9 - 19.01.21 - 13:46
(7) Спасибо Вам большое за помощь и советы! Все получилось:)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.