Шаблон 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 не будет опубликован. Обязательные поля помечены *