Элемент проекта вида «SoapСервис»
Для создания SOAP-сервиса следует добавить в проект элемент Soap Сервис.
В описании элемента проекта указываются настройки создаваемого сервиса, свойства, а также методы из модуля, которые реализуют операции SOAP-сервиса. Модуль SOAP-сервиса содержит описание передаваемых данных (структур встроенного языка), пользовательских исключений, а также реализацию операций сервиса.
Описание элемента проекта «SoapСервис»
При создании описания SOAP-сервиса вам необходимо определить следующие свойства:
- ПространствоИменСервиса — пространство имен, в котором описан сервис. Атрибут
targetNamespace
WSDL-описания сервиса (definitions.targetNamespace
). - ИмяСервиса — имя сервиса. Атрибут
name
WSDL-описания сервиса (definitions.name
). Если не указан, то используется имя элемента проекта. - КорневойUrl — базовая часть URL, по которой будет выполняться обращение к сервису.
- Обработчики — описание операций, которые выполняют обработку данных из входящего SOAP-сообщения от клиента сервиса и формируют результат для исходящего SOAP-сообщения. Для каждой операции вы пишете на встроенном языке метод, который реализует необходимую функциональность. Методы находятся в модуле SOAP-сервиса. Например, SOAP-сервис может выглядеть следующим образом:
ВидЭлемента: SoapСервис
Ид: 20658364-7777-4b14-9423-ec212de5be72
Имя: СервисМагазина
ОбластьВидимости: ВПодсистеме
КонтрольДоступа:
Вызов: РазрешеноВсем
ПоУмолчанию: РазрешеноВсем
ПространствоИменСервиса: https://mycustomshop.ru
ИмяСервиса: ShopService
КорневойUrl: shopservice
Обработчики:
-
Имя: AddToCart
Метод: ДобавитьВКорзину
Ошибки:
- СервисМагазина.MyCustomException
Модуль SOAP сервиса
- Структуры, для описания:
- Передаваемых в сервис параметров и результата запроса. Однако это не обязательно, можно также использовать встроенные типы — Число, Строка и тд. Данные типы будут автоматически сопоставлены с соответствующими XML-типами.
- Используемых в сервисе исключений. Данные типы будут сопоставлены с SOAP-ошибками.
- Методы, для описания:
- Операций, выполняемых в результате вызова обработчиков;
// Описание пользовательской ошибки
@ВПроекте
исключение MyCustomException
обз пер ReasonDescription: Строка
обз пер AppErrorCode: Число
;
// Структура, описывающая параметры метода обработчика
структура Item
обз пер Sku: Число
обз пер Name: Строка
обз пер Price: Число
;
//Обработчик операции сервиса
метод ДобавитьВКорзину(Item: Item, Count: Число)
// Метод, написанный разработчиком
;
- Запрещено использовать кириллицу в именах обработчиков;
- В структурах встроенного языка, используемых в сообщениях (параметрах и
возвращаемых значениях обработчиков на встроенном языке SOAP-сервиса), в
заголовках, а также в исключениях встроенного языка, используемых как SOAP
ошибки:
- Не должно быть циклических ссылок;
- Допустим только составной тип, состоящий из одного из поддерживаемых
типов + Неопределено. В этом случае в XML-элементе
будет использовано ограничение
minOccurs=0
. Другие составные типы не разрешены; - Допустимы только следующие типы данных:
Тип встроенного языка XML тип Примечание Строка string
Число decimal
Булево boolean
ДатаВремя dateTime
Дата date
Время time
Месяц gMonth
Длительность duration
Байты base64Binary
Структура complexType
Неопределено minOccurs=0
ЧитаемаяКоллекция<Тип>, где Тип — значения поддерживаемого типа
minOccurs=unbounded
Не поддерживается коллекция коллекций
Также в модуле SOAP-сервиса можно обработать событие ВычислитьРазрешенияДоступа (подробнее).
WSDL описание SOAP-сервиса
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="https://mycustomshop.ru" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="https://mycustomshop.ru"> <types> <xsd:schema> <xsd:import namespace="https://mycustomshop.ru" schemaLocation="http://127.0.0.1:9090/applications/SOAPServis/api/shopservice?xsd=1"/> </xsd:schema> </types> <message name="AddToCart"> <part name="parameters" element="tns:AddToCart"/> </message> <message name="AddToCartResponse"> <part name="parameters" element="tns:AddToCartResponse"/> </message> <message name="MyCustomException"> <part name="fault" element="tns:MyCustomException"/> </message> <portType name="ShopService"> <operation name="AddToCart"> <input message="tns:AddToCart"/> <output message="tns:AddToCartResponse"/> <fault message="tns:MyCustomException" name="MyCustomException"/> </operation> </portType> <binding name="ShopServicePortBinding" type="tns:ShopService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="AddToCart"> <soap:operation soapAction="AddToCart"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> <fault name="MyCustomException"> <soap:fault name="MyCustomException" use="literal"/> </fault> </operation> </binding> <service name="ShopService"> <port name="ShopServicePort" binding="tns:ShopServicePortBinding"> <soap:address location="http://127.0.0.1:9090/applications/SOAPServis/api/shopservice"/> </port> </service> </definitions>
URL для запроса к SOAP-сервису
Сервис обрабатывает POST-запросы. Корректный URL запроса к SOAP-сервису должен иметь следующую структуру:
{АдресПубликацииПриложения}/api/{КорневойURL}
http://[адрес сервера]/applications/[имя приложения]/api/shopservice
Чтобы получить WSDL описание сервиса, следует отправить GET-запрос с параметром ?wsdl. Например:
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
Рассмотрите части запроса по порядку:
- http или https
- Используемый
протокол
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
- АдресПубликацииПриложения
- Адрес «1С:Шины» и путь публикации приложения на
сервере
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
- api
- Признак того, что данный URL представляет запрос к публичному API
приложения
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
- КорневойURL
- Относительный URL сервиса. Должен быть уникальным среди всех сервисов в проекте.
Определяет конкретный сервис, который должен обработать
запрос
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
- ПараметрыЗапроса
- Стандартный способ передачи параметров запроса через
URL.
http://[адрес сервера]/applications/[имя приложения]/api/shopservice?wsdl
Элемент проекта SoapСервис предоставляет следующую функциональность и логику работы:
- Порождаемые типы встроенного языка
- SOAP-сервис, добавленный в проект, порождает во встроенном языке один тип, в модуле которого вы можете разместить все обработчики операций SOAP-сервиса
- Обработка запросов
- Для обработки запросов необходимо для каждой операции, описанной в SOAP-сервисе, создать в модуле SOAP-сервиса метод-обработчик
- Обработка ошибок
-
Во время исполнения обработчика на встроенном языке при возникновении ошибки выбрасывается исключение. «1С:Шина» создает из выброшенного обработчиком запроса исключения SOAP ошибку и формирует HTTP-код ответа 500 (Internal server error). Вы также можете создать пользовательское исключение в модуле SOAP-сервиса. Когда во время исполнения обработчика операции данное исключение будет выброшено, «1С:Шина» сериализует объект-исключение в SOAP Fault сообщение.
- Аутентификация внешних программ
-
Если настроен контроль доступа, отличный от РазрешеноВсем, то для аутентификации внешних информационных систем используются токены доступа
- Права
- Элемент проекта вида SoapСервис обладает правом Вызов (подробнее)
- Все свойства SOAP-сервиса
- Здесь описано назначение всех свойств SOAP-сервиса, которые вы можете изменять в проекте