Шаблон http-сервиса для вашего проекта


Http-сервис для обмена данными в формате JSON. Обработчики этого сервиса находятся во внешней обработке, что позволяет дорабатывать его без изменения конфигурации.
Также прилагаю пример мобильного приложения для работы с данным сервисом (получает номенклатуру и остатки на складе). Сервис очень быстро разворачивается и масштабируется под ваши задачи.

Введение

Доброго дня! Данный сервис получился действительно удобным и активно используется нашей командой в различных системах учета.
Основное его преимущество, как я считаю, это доработка без изменения конфигурации. Однажды добавив сервис в конфигурацию, вы больше его не изменяете, а дорабатываете внешнюю обработку, в которой и находятся обработчики http-запросов.
 
Кратко принцип работы

Итак, мы добавили наш сервис в конфигурацию и перед нами стоит задача получать в мобильном приложении (или в любом другом)
номенклатуру из нашей базы. Используемый формат запросов это JSON.

Приложение клиент должно отправлять JSON вида: 

{
"method":"GetGoods",
"params":{
"code":"12345"
}
}

То есть это структура со свойством "method" и свойством "params". Когда наш сервис получит этот запрос он запустит функцию во внешней обработке с именем "GetGoods" и передаст ей в качестве параметра структуру "params". 
В функции "GetGoods" у нас будет запрос, который получает номенклатуру. Таким образом, по большому счету, для получения требуемых данных мы реализуем только функцию (во внешней обработке) указанную в запросе и формируем в ней запрос во выборке данных.
 
К примеру функция GetGoods:

Функция GetGoods(Параметры)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ref,
| Номенклатура.ЭтоГруппа КАК IsGroup,
| Номенклатура.Наименование КАК Name,
| Номенклатура.Код КАК Code
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа";


Рез = Запрос.Выполнить().Выгрузить();

МассивСтруктур = ТаблицаЗначенийВМассивСтруктур(Рез);

Возврат МассивСтруктур;

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

В такой реализации функции наш http-сервис вернет ответ со следующим JSON:

[
{
"Ref":"f93e112a-c83a-11e2-8026-0015e9b8c48d",
"IsGroup":false,
"Name":"Бутылка ",
"Code":"ЦУ-00000053"
},
{
"Ref":"f93e112c-c83a-11e2-8026-0015e9b8c48d",
"IsGroup":false,
"Name":"Ящик ",
"Code":"ЦУ-00000054"
},
...

Т.е. это будет массив структур с полями запроса.

Еще один большой плюс данной разработки это отладка без участия приложения клиента.

Допустим мы решили, что будем отправлять какой-то запрос и реализовали для него функцию в обработке,
теперь нам нужно проверить, что же вернет http-сервис.

Открываем нашу внешнюю обработку (в которой мы уже реализовали функцию),
вставляем наш запрос, и, вуаля, получаем данные ответа в JSON:

Ну вот. Все просто и доступно) Пользуйтесь)

Кстати, в загрузках есть пример мобильного приложения, которое получает номенклатуру и остатки из нашей базы (в примере используется УТ 11). 
 

Дополнительная информация

Внешняя обработка сервиса должна быть добавлена в базу ("Дополнительные отчеты и обработки") 

Сервис работает на конфигурациях с управляемыми формами. Использовался с УТ 11, Розница 2, Бухгалтерия 3.

Если есть потребность для конфигураций на обычных формах, пишите в комментариях — сделаем.

Последний раз тестировался на платформе (8.3.13.1513), но работает и на более ранних версиях.

В файлах поставки:

Конфигурация с http-сервисом, внешняя обработка.
Дополнительно для скачивания: пример мобильного приложения для работы с данным сервисом.

46 Comments

  1. MarkoSokolov

    (1) Возможно) но поможет ли odata если нужно получить результаты сложного запроса с вложенными запросами и с соедиениями?

    Reply ↓
  2. ltfriend

    (1) вот именно, что это пример. Только это не очередной велосипед типа «odata», а реализация удаленного вызова процедур RPC, если более конкретно, то JSON-RPC. И реализовать можно что угодно, хоть получение данных (как вернуть номенклатуру с остатками и несколькими видами цен с помощью odata, особенно если сторонняя система требует формат json с определенной структурой?), так и запись данных и/или их доп обработку.

    Reply ↓
  3. dsdred

    (2)

    Возможно) но поможет ли odata если нужно получить результаты сложного запроса с вложенными запросами и с соедиениями?

    Не поможет. Я к тому и говорю…

    Вы демострируете пример который не требует вашего решения! Простым языком «Вы не продали мне ручку»!

    (3)

    это не очередной велосипед типа «odata»

    Я правильно понимаю что вы классифицируете odata — велосипедом?

    как вернуть номенклатуру с остатками и несколькими видами цен с помощью odata

    А вот такую задачу полтора года назад я кстати делал по odata.

    Еще раз повторю. Демонстрация обработки это как продажа. Нужно показать ее сильные стороны, показать сложный пример который она решает. А не стрелять из базуки по мухам.

    Вот и все что я хотел вам донести в первом сообщении.

    Reply ↓
  4. WKBAPKA

    (4) oData это конечно круто, но если работать из под андроид, retrofit, как пример, ничего не знает об этом протоколе. А довольно таки удобная библиотека.

    + сервисов еще в том, что логика обработки данных на стороне сервиса скрыта и может быть любой формы сложности, а не быть ограниченной рамками спецификации конкретного протокола.

    Поэтому не надо смешивать людей и коней в кучу 🙂

    Reply ↓
  5. WKBAPKA

    (3) да сравнивать протокол odata с мощью платформы 1С как то странно 🙂

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

    Reply ↓
  6. acanta

    (6) о каких сторонних системах идёт речь? Может ли программист 1с посмотреть как происходит процесс на их стороне?

    Или что он должен знать и чего не должен знать?

    Reply ↓
  7. dsdred

    (5)

    + сервисов еще в том, что логика обработки данных на стороне сервиса скрыта и может быть любой формы сложности, а не быть ограниченной рамками спецификации конкретного протокола.

    А ограничение в объеме данных на стороне Веб-сервера не действует?

    Вы суть того, что я написал не уловили.

    Давайте так… Чтобы продавать мерседесы, нужно продавать мерседесы, а не демонстрировать Автоваз и говорить что мерседес это круто.

    тоже самое я вот тут написал

    Вы демострируете пример который не требует вашего решения! Простым языком «Вы не продали мне ручку»!

    и вот тут

    Демонстрация обработки это как продажа. Нужно показать ее сильные стороны, показать сложный пример который она решает. А не стрелять из базуки по мухам.

    П.С. Я не против данного решения, я против такой демонстрации.

    В своей работе сам использую http-сервисы, люблю их и продвигаю! Можете по моим публикациям увидеть мою к ним любовь ;))

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

    Доп обработки привязаны к БСП, а это с одной стороны плюс, а с другой минус.

    Reply ↓
  8. WKBAPKA

    (7) например, Power BI

    да в принципе, о любой системе, будь то какой нибудь интернет-магазин или учетная система.

    Программисту 1С вообще ничего не надо знать, он дает лишь описание объектов и как с ними работать.

    Reply ↓
  9. WKBAPKA

    (8) что то я вашей логики не улавливаю про объемы данных.

    Что то, что то, работает только при наличии WEB-сервера. Как раз HTTP сервис и позволит вам сделать данные более компактными, в отличии от odata.

    Предложенное решение довольно таки интересное. И суть не во внешней обработке, а в том, что на вход подаешь метод, а на выходе результат. Причем, результат можно получить используя всю мощь 1С.

    odata — это вообще отдельная тема

    Reply ↓
  10. dsdred
  11. WKBAPKA

    а сильная сторона, то что я могу, как программист 1С, получить все.

    А вот через odata далеко не все и в том виде, в котором мне надо.

    а у odata одна сильная сторона, там не нужен программист 1С 🙂 и сам протокол позволяет манипулировать данными на стороне самой 1С.

    Что автор должен вам показать из примера, что бы вас впечатлило? Сама возможность управлять процессом, это уже одна из сильных сторон )

    Reply ↓
  12. WKBAPKA

    (11) ну и что? если есть технического ограничение на объемы передаваемых данных, кто мне запрещает выполнить 10 последовательных запросов, а не 1?

    Мы говорим с вами о разных вещах. У Apache немного другие настройки.

    Reply ↓
  13. acanta

    (9) т.е. в этом случае вопрос зачем вообще они нужны не обсуждается?

    Reply ↓
  14. WKBAPKA

    (14) кто они и что значит нужны?

    я уже объяснил, ODATA и HTTP-сервис используют разную парадигму. Это как палец с пятой точкой сравнивать.

    Reply ↓
  15. dsdred

    (13)

    Мы говорим с вами о разных вещах

    Мы начиная с вашего (5) комментария говорим о разных вещах…

    Я пытаюсь донести, что ДЕМОНСТРАЦИЯ плохая.

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

    Для небольших проектиков оно очень даже сгодится, для серьезных вещей сыровато.

    Reply ↓
  16. WKBAPKA

    например, я из Power BI могу получить данные из любого справочника или регистра. Мне ничего не надо знать про 1С, кроме как называется объект в системе к которому я обращаюсь и как составить правильный запрос ODATA

    Reply ↓
  17. WKBAPKA

    (17) что там сырого?

    работает да и работает. А надо будет допилить, так напильник всегда под рукой. Это же для программиста решение, а не для конечного пользователя.

    Reply ↓
  18. WKBAPKA

    (17) взяли затулили один веб сервис, а реализацию сам себе пиши во внешних обработках такую какую хочешь. Как по мне так не плохо. Мне из скринов, все устроило, все понравилось и я лично понял зачем мне это надо.

    Reply ↓
  19. dsdred

    (18)Исходя из своего опыта могу сказать, что там пилить и пилить… Но для небольших задачек сгодится.

    Не вижу смысла все описывать…

    Reply ↓
  20. WKBAPKA

    (20) ну так автор же и не предлагает это использовать в промышленных маштабах 🙂

    Reply ↓
  21. dsdred

    (19)

    Я о том и говорю Вы поняли, я понял. А почему?

    Потому, что опыт есть.

    Вас это решение устраивает полностью. Качайте и пользуйтесь.

    Меня не устраивает, у меня задачи серьезнее и на данный момент более серьезный инструмент уже наработал.

    Минусы перечислять не буду, но плюсы есть не спорю.

    Reply ↓
  22. WKBAPKA

    (22) так я ж не спорю 🙂 под каждую задачу свое решение

    Reply ↓
  23. dsdred

    (21)Вы издеваетесь?

    Я еще раз говорю, что пример с выборкой номенклатуры — это ОЧЕНЬ ПЛОХОЙ ПРИМЕР, так как такую вещь можно сделать более простым способом нежели предложенная обработка.

    И только — это мне не нравится в таких решениях, коих на инфостарт выкладывают регулярно.

    П.С. ВОПРОС ИСЧЕРПАН!!!

    Reply ↓
  24. WKBAPKA

    (24) а что он должен был вам предложить? 🙂

    ну блин, это же ресурс для программистов.

    А вы что, в своих фантазиях дальше выборки номенклатуры ограничены? Если вы понимаете разницу между одата и хтпп сервисом и принципами обработки информации, то сами можете догадаться, что засунуть во внешнюю обработку можно любой алгоритм, даже самый извращенный, который не снился разработчикам одаты )

    и не надо так нервничать )

    Reply ↓
  25. WKBAPKA

    + человек оформил публикацию согласно правилам инфостарта 🙂

    Reply ↓
  26. dsdred

    (25)

    а что он должен был вам предложить? 🙂

    Мне лично ничего. Но если в аргументах идет сложная выборка, дак ее и надо было показывать в демонстрации. Логично?

    это же ресурс для программистов.

    В том то и дело что не только для программистов…

    и не надо так нервничать )

    Я не люблю переливать из пустого в порожнее

    Reply ↓
  27. WKBAPKA

    (27) ну конечно, когда мы с вам о разных вещах говорим.

    Мне достаточно простого примера, что бы понять основную идею — вынести во внешние обработки логику, вам же надо показать пример с 1000 строк кода.

    Вы, конкретно, придираетесь к демонстрации, а не к сути решения.

    И это решение сугубо для программиста, т.к. конечный пользователь с ним ничего не сможет сделать.

    Reply ↓
  28. dsdred

    (28)Вы допускаете, что программист освоил OData, но не освоил http-сервисы?

    Или он вообще не освоил не то не другое…

    Я лично допускаю такие вещи, так как провожу собеседования.

    Reply ↓
  29. WKBAPKA

    (29)я допускаю, когда программист может вообще не знать, что такое OData и http-сервисы 🙂

    если он с ними никогда не работал.

    но суть вопроса я не полностью уловил.

    Если мне дают что то в руки, то что я не знаю, я сначала изучаю предмет, а потом начинаю с ним работать.

    Не понимаю, как можно работать с черным ящиком

    Reply ↓
  30. dsdred

    (30)

    но суть вопроса я не полностью уловил.

    Если мне дают что то в руки, то что я не знаю, я сначала изучаю предмет, а потом начинаю с ним работать.

    Не понимаю, как можно работать с черным ящиком

    Вот вы уже на правильном пути, осталось чуть чуть и вы мои слова произнесете.

    Будут они возиться с этим черным ящиком?

    Reply ↓
  31. WKBAPKA

    (31) я бы таких лодырей на работу не брал бы

    я скачал конфигурацию, за 5 минут разобрался как работает.

    Кстати, код очень аккуратный

    Reply ↓
  32. WKBAPKA

    причем, достаточно все просто написано, без пафоса, с использованием Вычислить () 🙂

    Если взять напильничек, то в принципе идея не плохая

    Reply ↓
  33. dsdred

    (32)

    я бы таких лодырей на работу не брал бы

    А кто сказал, что они лодыри?

    Просто работали там где это было не нужно, ну и прокачивали что то другое.

    я скачал конфигурацию, за 5 минут разобрался как работает.

    Кстати, код очень аккуратный

    Как они поймут, что им нужна эта разработка?

    Reply ↓
  34. WKBAPKA

    (34) вы такие вопросы задаете. это вообще то их проблемы. Для меня такие вопросы дикость. Я когда ищу инструмент для решения вопроса, пишу его или сам или, если не хватает квалификации (например, в Android) ищу нужную библиотеку.

    А потом читаю и эксперементирую. Тем более, если это бесплатная библиотека. А тут вам бесплатно, да еще и руководство по использованию предоставь 🙂

    странные у вас программисты работают

    Reply ↓
  35. dsdred

    (35)Вот этим отличается программист от продавана.

    Но лучше когда программист умеет себя продать!

    Продажа ручки, просто и наглядно

    Reply ↓
  36. WKBAPKA

    (36) согласен.

    Но я все же исповедую из опыта другую концепцию — разделение труда.

    Программист должен хорошо программировать, а продаван должен продавать.

    В мире отличном от 1С все так и организовано. Есть тупо кодеры, есть менеджеры проектов, есть дизайнеры. А в 1С все в куче, поэтому многие решения кривые 🙂

    Reply ↓
  37. acanta

    (35) в этом то и проблема. Вопрос это уже половина ответа. Не продать решение имеющегося вопроса это значит не выполнить свою половину работы.

    Reply ↓
  38. WKBAPKA

    (38) автор публикации ничего не продает, а дает возможность пользоваться своим решением.

    А вы для себя сами принимаете решение, использовать его в своих задачах или нет.

    Я смотрю такие решения в поисках не стандартных подходов.

    Reply ↓
  39. androgin
    …без изменения конфигурации…

    Итак, мы добавили наш сервис в конфигурацию…

    противоречия одни )))

    Reply ↓
  40. MarkoSokolov

    (40) Вы вырвали слова из контекста.

    Http-сервис для обмена данными в формате JSON. Обработчики этого сервиса находятся во внешней обработке, что позволяет дорабатывать его без изменения конфигурации.

    Reply ↓
  41. WKBAPKA

    (40) если сделать расширение, то все будет гуд… я кстати, сначала подумал, что это расширение, ан нет 🙂

    но это же не беда сделать самому ,правда? )

    Reply ↓
  42. it@contlog.ru

    в примере не хватает планов обмена и процедуры фонового обмена. Для масштабирования это было-бы полезно.

    Reply ↓
  43. androgin

    (41) я не вырвал. я конкретно процитировал противоречие

    Reply ↓
  44. androgin

    (42) а потом вы еще постарайтесь его опубликовать))))

    Reply ↓
  45. WKBAPKA

    (45) не пробывал, поэтому не знаю 🙂

    кстати спасибо, как то думал с расширением. но если есть такие проблемы…

    Reply ↓
  46. dsdred

    (45)В чем проблемы с публикацией http-сервиса в расширении?

    Вот один из примеров, проблем не наблюдал -> Мобильный клиент + HTTP Сервис + Расширение конфигурации

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *