Быстрое прототипирование веб-сервиса на платформе 1C:Enterprise 8

Доброго времени суток, уважаемые хабралюди!

Некоторые из вас наверное знают, что на платформе 1C:Enterprise 8 (1С: Предприятие 8) некоторые безумцы умельцы, помимо приложений для бухгалтеров, делают, например еще и игры. Но речь пойдет не о разработке игр, хотя в какой-то мере веб-сервисы можно использовать и для этого.

Хотя платформа 1C:Enterprise 8 и предметно ориентирована, но благодаря наличию в ней технологий COM, OLE, XML, HTML, SOAP и некоторых других, может использоваться и для задач не связанных напрямую с автоматизацией бизнеса. Лично меня в ней привлекает очень быстрая скорость разработки, отладки и разворачивания приложения. Эти характеристики для меня являются ключевыми при выборе платформы для прототипирования.

Под катом я на простом примере покажу насколько быстро на платформе 1C:Enterprise 8 можно реализовать веб-сервис, разработать для него базу данных и опубликовать на веб-сервере. Приведенный пример, в немного измененном виде, используется в большом и реальном проекте, прототип которого было решено реализовать на 1C. Проект еще находится в стадии разработки, но я все больше склоняюсь к тому, чтобы и финальную реализацию сделать на этой платформе.

Постановка задачи примера


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

Специально для ненавистников кириллицы весь код (и наименование платформы) представлен в англоязычном написании.

Итак, приступим.

Разработка базы данных


Надеюсь добавить новое приложение для разработки на платформе не вызовет ни у кого каких бы то ни было затруднений. В общих чертах при добавлении (1) необходимо указать его наименование и место расположения. Для непосредственной разработки приложения необходимо перейти в режим Designer (2).



Нам понадобится всего пара кликов, чтобы создать хранилище файлов в базе данных. Для этого добавляем в приложение catalog (справочник) FileStorage.



Определяем для него один единственный реквизит ValueStorage с типом ХранилищеЗначения.



Всё, структура базы данных для хранения файлов реализована. Мы будем хранить только двоичные данные самого файла, имя хранить для нашего примера не нужно. Если все-таки понадобится, то решается это также достаточно просто – добавляем еще один реквизит для хранения наименования файла.

Реализация веб-сервиса


Теперь приступим к разработке самого веб-сервиса.

Добавим новый веб-сервис в приложение. Зададим ему имя FileStorageService.



Обязательно определим для него пространство имен.



И добавим два метода PutFile(File тип base64binary) возвращаемое значение типа string и GetFile(Id тип string) возвращаемое значение типа base64binary. В модуле веб-сервиса напишем для них несколько строчек кода:

Function PutFile(File)

If File.Size() = 0 Then
Raise "INVALID_BINARY_DATA";
EndIf;

// Добавление файла в БД.
NewFile = Catalogs.FileStorage.CreateItem();
NewFile.ValueStorage = New ValueStorage(File);
NewFile.Write();

Return NewFile.Code;

EndFunction

Function GetFile(Id)

// Поиск файла в БД по переданному коду.
File = Catalogs.FileStorage.FindByCode(Number(Id));

If NOT ValueIsFilled(File) Then
Raise "INVALID_FILE_CODE";
EndIf;

Return File.ValueStorage.Get();

EndFunction


Всё, необходимые нам функции получения и помещения файла на сервер реализованы. Осталось только завести пользователей для HTTP аутентификации и опубликовать наш веб-сервис.

Публикация на веб-сервере


Вначале разработки в приложении отсутствуют какие либо пользователи и доступ к информационной базе разрешен без ввода имени и пароля. Для того чтобы это исправить необходимо добавить пользователей в информационную базу. Также эти пользователи будут использоваться и для HTTP аутентификации. Первое что мы сделаем, это добавим роль с полными правами.



Далее назначим эту роль первому созданному пользователю (Administration -> Users -> Add) – администратору.





После этого в список добавим обычных пользователей.



После добавления пользователей опубликуем наш веб-сервис. Публикация (Administration -> Publishing on web-server...) возможна на IIS или Apache. Все необходимые для этого действия платформа выполняет автоматически. Нам необходимо только нажать кнопку Publish.



Это всё, опубликованным веб-сервисом можно уже пользоваться.

Как мне кажется прочтение этого текста займет гораздо больше времени, чем заняла реализация. Надеюсь уважаемым хабралюдям было интересно узнать, что прототипировать веб-сервисы на платформе 1C:Enterprise 8 достаточно быстро и просто. В некоторых средах разработки обычный «Hello world» реализовать гораздо сложнее.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 13

    0
    насколько помню, то до сих пор есть какие-то нерешенные проблемы при публикации приложения на IIS.
    Для сравнения можно еще привести пример публикации на apache.
      0
      При корректно настроенном IIS никаких проблем с публикацией не возникает.
      Публикация для Apache в автоматическом режиме ни чем не отличается от публикации для IIS. Нужно просто указать соответствующий web-server.
        +1
        Держатся уже два стабильных релиза:

        10082470 Все неизвестные расширения CGI

        Проблема:
        При публикации веб-клиента под IIS6 при помощи диалога публикации в Web Service Extensions запрещаются «Все неизвестные расширения CGI».
        Дата публикации: 2011-06-17

        Проблема:
        При публикации веб-сервисов под IIS6 для 8.2 версии удаляется расширение веб-службы для 8.1 версии и наоборот.
        Способ обхода:
        Выполнить публикацию веб-сервисов одной из версий вручную.
        Дата публикации: 2011-06-17

        А по поводу публикации на apache — прошу прощения, я имел в виду ручную публикацию. Есть там пара забавных ньюансов, которые навскидку не помню.
          0
          Про проблему под IIS 6 я не знал, спасибо. У меня IIS 7, поэтому с этим не столкнулся.
      0
      ну это все-таки нечто из разряда эзотерического веб-программирования. на brainfuck наверняка тоже можно веб-сервисы делать, но зачем?
        0
        подскажите пожалуйста, что именно в этом эзоретическое? Абсолютно штатный механизм платформы.
        И еще один вопрос — вы разницу между платформой и конфигурацией в 1с представляете?
          +2
          Вполне представляю, спасибо, неоднократно сталкивался. Своим комментарием не имел в виду ничего плохого, поэтому оскорбляться не стоит. Развернуто же замечу следующие пункты:
          1. Это очень узкоспециализированное решение, которое подходит в основном для сервисов, привязанных к Entity-Atribute-Value-модели. Собственно, так его и следует позиционировать.
          2. Вот здесь (чуть ниже) очень правильно заметили, что 1C реже выступает в качестве поставщика услуг, нежели потребителя.
          3. Если веб-ресурс все же общего назначения, то 1C как платформа для такого решения будет значительно медленнее, чем предназначенные для этого продукты. В основном — как раз за счет указанных в начале статьи COM, OLE, XML, HTML, SOAP и некоторых других, которые отключить, как в случае с какими-нибудь PHP/Python+Apache/Nginx etc банально невозможно.
          Про brainfuck — что ж, извините, это была просто неудачная шутка.
            0
            что Вы, это мне следует попросить прощения. Дело в том, что Ваш предыдущий комментарий был слишком похож на типичный выплеск субъекта, с 1с совершенно не знакомым, но по невнятной причине считающей её мировым злом и вообще какашкой априори.

            По первым двум пунктам согласие полное, а вот по третьему чую какие-то непонятные противоречия. То, что модуль-провайдер сервиса в любой момент времени готов к использованию не значит, что он кардинально кушает ресурсы системы. Еще кстати забыли про native API. [джихад]Это же изначально тормозное поделие на некошерных си++[/джихад]
          0
          На brainfuck скорее всего и правда не зачем, а вот в процессе автоматизации деятельности предприятия часто возникают задачи интеграции со сторонними инф. системами (сайтами, внешними классификаторами, сервисами банков и т.д.). Конечно, в качестве поставщика услуг 1с выступает реже, чем в качестве потребителя.
            0
            Как я описывал в посте, основным преимуществом платформы считаю очень быструю скорость разработки и развертывания приложений. При прототипировании для меня это основные характеристики.
            0
            Отлично! Как говорил великий Мао: «Пусть на Хабре расцветают тысячи цветов». То бишь платформ и языков.

            По сути. Как пример возможностей, наверное интереснее было бы использовать имеющиеся в платформе возможности по хранению именно файлов. В данном примере у нас не файл получился, а просто безымянный кусок бинарных данных.
              0
              В посте есть пример, как можно организовать хранение наименования файла. Подобным образом можно хранить и все остальное. Если коротко, то нужно добавить необходимые реквизиты для справочника FileStorage и организовать их заполнение в функции PutFile. Для возврата двоичных данных вместе с атрибутами нужно будет описать соответствующий тип в XDTO-пакете. И назначить этот тип типом возвращаемого значения для функции GetFile. Если есть желание, могу написать подробную статейку на эту тему.
                0
                Если это не сильно затруднит, добавьте, плиз, еще пару слов про XDTO пакеты! Желательно, на каком-то примере, хотя бы на вышеупомянутом, возврате пакета с двоичными данными и именем файла. Спасибо!

            Only users with full accounts can post comments. Log in, please.