Учимся создавать http сервис (часть четвертая). Изучение метода POST http запроса (передача текстовых данных)

11.10.20

Разработка - Запросы

Пошаговое руководство по созданию http сервисов (часть четвертая). Изучение метода POST http запроса.

На прошлых уроках:

-Учимся создавать http-сервисы (часть первая)

-Учимся создавать http сервисы (часть вторая). Передача параметра в http сервис

-Учимся создавать http сервис (часть третья). Передача нескольких параметров в http сервис ,

мы с вами научились создавать http сервис, научились отправлять запросы на сервер. Запросы, которые, до сих пор отправляли на сервер, были GET запросами. При помощи метода GET запроса можно получать данные с сервера. Мы, например, получали информацию о документах расходных документах, а также, получали информацию о номенклатуре.

Что делать, если нам нужно передать некие данные на сервер? На помощь приходит http запрос типа POST!

Поставим задачу:

-Перенесем данные справочника «Номенклатура» из базы источник в базу приемник при помощи http сервиса, используя POST запрос. Переносить данные будем в JSON формате.

 

Подготовим базу источник.

-Создаем чистую информационную базу.

-Назовем ее «БазаИсточник»

-Добавляем в нее несколько объектом метаданных:

Спр. «Номенклатура»

Реквизит «Атрикул» тип строка 25

-Обработка «ИзучениеPOSTЗапросов»

 

Подготовим базу приемник

-Создаем чистую информационную базу

-Назовем ее «БазаПриемник»

-Добавим в нее несколько объектов метаданных:

Спр. «Номенклатура»

Реквизит «Атрикул» тип строка 25

-Создаем новый http сервис «ИзучениеPOSTЗапросов»

-Корневой URL – «post»

 

-Переходим на закладку «Шаблоны URL»

-Добавляем новый шаблон «ЗагрузкаНоменклатуры»

-Создадим шаблон, назовем его «product_json»

-Добавим новый метод «ЗагрузкаНоменклатурыJSON»

-Выбираем HTTP метод POST

 

-Публикуем http сервис на веб сервере, если забыли, как это сделать, смотрите статью 

Учимся создавать http-сервисы (часть первая)

После публикации у меня получился следующий путь «http://localhost/post_test/hs/post/product_json/»

Localhost – IP адрес

post_test – имя публикации

hs – признак http сервиса

post – корневой каталог

product_json - шаблон

 

Переходим в базу источник.

-Открываем обработку «ИзучениеPOSTЗапросов»

-Создадим форму. На форме разместим кнопку «Перенести номенклатуру JSON»

 

 

Шаблон, по которому мы подключаемся из 1С к http сервису следующий:

-Создаем объект типа «HTTPСоединение», в его конструкторе передаем ip адрес http сервиса, например, так:

 

-Создаем объект типа «HTTPЗапрос», в его конструкторе указываем адрес ресурса и заголовки, например так:

 

-Помещаем данные, которые мы хотим отправить на сервер в тело запроса. Мы хотим передать текстовые данные, для этого мы воспользуемся методом «УстановитьТелоИзСтроки»

-Отправляем данные на сервер. (пример кода)

 

Еще раз. Для того чтобы передать данные на сервер, надо эти данные поместить в тело POST запроса. В заголовке необходимо указать какого типа эти данные.

-Открываем базу источник в режиме предприятия и добавляем в справочник «Номенклатура» несколько элементов.

 

Базу источник мы подготовили!

 

Переходим в базу приемник

-Добавляем общий модуль «ОбщегоНазначения»

-В нем описываем две процедуры

 

-Переходим в обработчик метода «ЗагрузкаНоменклатурыJSON» http сервиса «ИзучениеPOSTЗапросов»

-Описываем в нем следующий код

 

Базу приемник мы подготовили.

Запускаем обработку из базы источник. Нажимаем на кнопку. И в базе приемнике создается номенклатура.

 

 

Видео инструкция тут:

 

 

Там же, вы сможете скачать файлы конфигурации источника и приемника.

 

Итак, мы решили поставленную задачу.

При реализации данного функционала была использована платформа 1С:Предприятие 8.3 (8.3.12.1567)

Всего хорошего.

http web сервис GET POST

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121552    670    389    

709

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5738    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1998    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6276    30    mkalimulin    25    

49

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1739    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5382    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16156    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user1304317 11.10.20 15:39 Сейчас в теме
2. user1464234 11.10.20 17:18 Сейчас в теме
Подскажите пож-ста, можно ли все это реализовать в виде расширения, например к БП 3?
Общий модуль и обработки в расширение включаются, а вот остальные упомянутые в статье объекты метаданных?
5. platonov.e 158 12.10.20 07:00 Сейчас в теме
(2) Это зависит от платформы.
user1464234; +1 Ответить
6. vitika_m 12.10.20 10:37 Сейчас в теме
(2) теоретически в расширение эти объекты добавить можно, но вот использовать для публикации не имеется возможности, так как в окне публикации он не появится, по крайней мере на платформе 8.3.16...
user1464234; +1 1 Ответить
14. uno-c 234 13.10.20 03:24 Сейчас в теме
(6) Не появится в списке - не значит, что нельзя использовать. Нормально публикуется и работает из расширений. Проверено не раз, и не только на 8.3.16.
gigapevt; +1 Ответить
15. vitika_m 13.10.20 07:15 Сейчас в теме
(14)отлично! А можно поподробнее?
17. vitika_m 13.10.20 11:44 Сейчас в теме
18. dsdred 3251 14.10.20 14:03 Сейчас в теме
(15)https://infostart.ru/1c/articles/842751/
вот тут в расширении, и публикуется и работает.
vitika_m; +1 Ответить
19. vitika_m 17.10.20 11:57 Сейчас в теме
(18) Подробнее и не опишешь! Спасибо большое!
3. user1464234 11.10.20 21:12 Сейчас в теме
И из 7 ки с использованием компоненты v7plus как настроить тоже самое было бы полезно.
7. acvatoris 527 12.10.20 11:11 Сейчас в теме
Скажем так, если в v7plus есть методы, которые позволяют подлючиться к http сервису, если есть методы, которые позволяют помещать данные в тело запроса, то можно, если нет, то увы.
user1464234; +1 Ответить
4. Fox-trot 156 12.10.20 06:49 Сейчас в теме
(0) поиск дубля не помешал бы перед тем как создавать новый элемент справочника
8. dsdred 3251 12.10.20 11:56 Сейчас в теме
обработка ИзучениеPOSTЗапросов
а на картинке ИзчениеPOSTЗапросов

для JSON наверное правильнее
HTTPЗапрос.Заголовки.Вставить("Content-Type","application/json");
10. Поручик 4670 12.10.20 14:12 Сейчас в теме
(8) Смотря как сервер-приёмник обрабатывает данные.
11. dsdred 3251 12.10.20 14:44 Сейчас в теме
(10)Чаще всего если сервис сторонний то разворачивают без этого заголовка.
К примеру сейчас обмен с API IIKO делаю, там этот момент не документирован, но без этого заголовка кушать запросы отказывается.
9. ICeZm 21 12.10.20 14:09 Сейчас в теме
12. ltfriend 954 12.10.20 21:00 Сейчас в теме
Технически, можно передать данные и создать объект и GET запросом, передав нужные значения в параметрах, т.к. GET-запрос не имеет тела. Но это, конечно, извращение, да и размер данных ограничен максимальной длинной URL.

А передать данные в теле запроса можно и методами PATCH, PUT, а не только POST.

Так, распространённая практика при создании REST API использовать POST для создание объекта, а PUT/PATCH для его изменения (метод DELETE, соответственно, используется для удаления).

А вообще, все эти методы используются на усмотрение программиста. Встречался с таким, что для всех запросов использовался только POST (и для получения данных, и для передачи).

По поводу заголовка Content-Type. Вы указываете text/plain, а передаёте json (Content-Type: application/json). А если учесть, что база-приёмник ни как этот заголовок не использует, то его вообще можно не передавать.

Ну и я бы настоятельно рекомендовал перед изучением создания http сервисов, сначала изучить HTTP-протокол. Хотя бы, с прочтения статьи на википедии: https://ru.wikipedia.org/wiki/HTTP
RustIG; Fox-trot; +2 Ответить
13. Aquashop 46 12.10.20 21:31 Сейчас в теме
Очень подробно, в свое время не хватало этого=)
20. aspirator23 339 18.10.20 17:42 Сейчас в теме
Есть ограничения на длину передаваемой строки в этом запросе HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаНоменклатураJSON); ?
22. BlinOFF 7 04.12.20 11:04 Сейчас в теме
Здравствуйте!Скачал cf из примера, установил, на стороне приемника
СтрокаНоменклатураJSON = Запрос.ПолучитьТелоКакСтроку();
приходит пустая строка. Подскажите что не так? Платформа
1С:Предприятие 8.3 (8.3.16.1224)
upd: обновление платформы до 8.3.18 решило проблему
23. mikl79 118 08.12.20 10:53 Сейчас в теме
Добрый день.

Сделал все как описано, но HTTPОтвет получает код 500:

Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Результат работы: Результат.КодСостояния = 500

В чем может быть причина?
24. acvatoris 527 09.12.20 22:01 Сейчас в теме
Добрый день. Высылаю Вам ссылку на cf файл. Проверьте еще раз, то что вы сделали с файлом. Может все-таки где-то ошибка.
https://yadi.sk/d/oQK4EjKZiN1a4Q
25. user817897 2 21.12.20 15:58 Сейчас в теме
Помогло разобраться с проблемой(дело в том что забыл прописать /hs/ , и просто не замечал...)
Спасибо
26. unknown181538 151 28.08.22 02:07 Сейчас в теме
Спасибо! Помогло очень быстро сделать по образцу! Очень читабельно написано.
acvatoris; +1 Ответить
27. unknown181538 151 28.08.22 04:46 Сейчас в теме
Не понял только, как работать с ошибками. У меня была ошибка в коде в приемнике. В журнал регистрации она не записывалась, отладчик тоже не получилось подключить.
28. acvatoris 527 28.08.22 17:13 Сейчас в теме
Добрый день. Непонятно о каких ошибках идет речь. Может быть эта статья вам поможет https://infostart.ru/1c/articles/1298261/
29. unknown181538 151 28.08.22 21:27 Сейчас в теме
(28) Ну обычные ошибки в коде обработчиков, там где я уже свой код создания документа написал. То, что должно было бы возвращать "поле объекта на найдено".
Посмотрел ссылку - да, возможно, адрес отладчика надо вставить. Спасибо, попробую позже.
30. Attya 04.05.23 14:41 Сейчас в теме
Добрый день. А как можно отправить не json, а несколько файлов?
31. dinopopyys 151 19.05.23 11:02 Сейчас в теме
32. user1192594 19.05.23 13:26 Сейчас в теме
Добрый день. Спасибо за пример.
Может стоит уточнить, что в строке
" Сервер = "localhost"; " может потребоваться указать нестандартный порт.
33. puzanov1973 10.11.23 17:11 Сейчас в теме
Добрый день!
Как ввести логин/пароль для подключения к приемнику?
34. acvatoris 527 11.11.23 09:14 Сейчас в теме
Добрый день. Задачу авторизации пользователя можно решить разными способами. Один из самых простых - например - Базовая авторизация (Basic Auth).
Данный способ авторизации заключается в том , что вы в заголовок http запроса передаете ключ "authorization" с значением. В общем виде это выглядит так 'authorization': строка в которой содержится логин и пароль зашифрованная в формате Base64.

Вот полный пример 'authorization': "Basiс" + " " + ФункцияКотораяПреобразовываетСтрокуВБазе64("ИмяПользователя:ПарольПользователя")

Вот , примерно, так выглядит функция , которая создает значение для ключа "authorization" на языке dart:

String basicAuthorization(String userName, String password) {

return 'Basic ${base64Encode(utf8.encode('$userName:$password'))}';

}
И хэш мэп заголовков:

Map<String, String> headers = {
"accept": "application/json",
"content-type": "application/json;charset=UTF-8",
'charset': 'utf-8',
'authorization': basicAuthorization("user", "pass"),
};
Оставьте свое сообщение