CWebServiceDesc
Веб-сервис
IWebServiceПараметр | Тип | Описание |
---|---|---|
wsdlauto | boolean | Параметр указывает, нужно ли генерировать WSDL-код автоматически. |
wstargetns | string | Пространство имён, например, http://bitrix.ru/ |
wsendpoint | string | Конечная точка (точка доступа) веб-сервиса - например, http://bitrix.ru/ws/testws.php |
classes | array | Описатель методов веб-сервиса. |
structTypes | array | Описатель сложных типов данных веб-сервиса (структуры). |
classTypes | array | Описатель сложных типов данных, десериализуемых из XML в экземпляры классов. |
Класс CWebServiceDesc (описатель веб-сервиса) должен быть полностью инициализирован. Этот класс возвращается методом IWebService::GetWebServiceDesc. После регистрации описателя веб-сервиса, в его экземпляре автоматически создаётся экземпляр SOAP сервера и экземпляр WSDL генератора.
Методы веб-сервисов всегда:
- принадлежат классу, реализующему веб-сервис;
- полностью описывают свои исходящие и входящие параметры;
- строго соблюдают типы входящих\исходящих данных согласно их описанию.
Типы данных
Типы данных используемые методами веб-сервиса могут быть двух типов:
- Простые типы - string, bool, boolean, int, integer, double, float, number;
- Сложные типы - массивы, структуры (сериализуются в ассоциативные массивы), классы (сериализуются в экземпляры классов); Описываются с помощью structTypes, classTypes.
Типы данных описываются в трёх местах в описателе веб-сервиса CWebServiceDesc:
- classes - массивы как параметры методов (см. описание классов);
- structTypes - структуры;
- classTypes - классы;
Описание веб-сервиса
Если автоматически генерируется WSDL, то генерируется Document/Literal binding. SOAP сервер поддерживает также исключительное Document/Literal binding. Для всех типов и параметров генерируется XSD схема.
Параметр | Описание |
---|---|
classes | Этот член класса обязательно должен быть инициализирован. Описывает
методы веб-сервиса через его класс, входящие и исходящие параметры. Может
оперировать массивами (как сложными типами данных) если указывается
атрибут arrType и varType. При этом для массива
автоматически создаётся свой тип данных в XSD
схеме. Ассоциативный массив: $wsdesc->classes = array( "Имя класса содержащего метод веб-сервиса" => array( "Название метода веб-сервиса" => array( // означает что метод публичный "type" => "public", "name" => "Название метода веб-сервиса", // описание принимаемых методом параметров // "strict" => "no" - значит, что параметр не обязательный. |
structTypes | Описывает структурные типы данных. В PHP они представлены
ассоциативными массивами. В VisualStudio они представлены
структурами (или классами). SOAP сервер десериализует эти типы в ассоциативные массивы. Имена этих типов данных могут быть использованы в описателе параметров методов веб-сервиса в classes. Для этих типов данных автоматически создаётся ComplexType в xsd схеме. Ассоциативный массив: $wsdesc->structTypes["ИмяСтруктуры"] = array( "ИмяПоля" => array("varType" => "ТипДанных"), ... ); |
classTypes | Описывает классы как типы данных. В PHP, VisualStudio они
представленны классами. SOAP сервер десериализует эти типы в экземпляры описанных классов. На момент десериализации класс должен быть определён (например, в компоненте, реализующем веб-сервис). Имена этих типов данных могут быть использованы в описателе параметров методов веб-сервиса в classes. Для этих типов данных автоматически создается ComplexType в xsd схеме. Ассоциативный массив: $wsdesc->classTypes["ИмяКласса"] = array( "ИмяПоля" => array("varType" => "ТипДанных"), ... ); |
Пример использования
В качестве хорошего примера использования CWebServiceDesc, вы можете исследовать вот этот файл: \bitrix\modules\webservice\classes\general\webservice.wsdl.php:
class CCheckAuthWS extends IWebService { ... function GetWebServiceDesc() { $wsdesc = new CWebServiceDesc(); $wsdesc->wsname = "bitrix.webservice.checkauth"; $wsdesc->wsclassname = "CCheckAuthWS"; $wsdesc->wsdlauto = true; $wsdesc->wsendpoint = CWebService::GetDefaultEndpoint(); $wsdesc->wstargetns = CWebService::GetDefaultTargetNS(); $wsdesc->classTypes = array(); $wsdesc->structTypes["CUser"] = array( "ID" => array("varType" => "integer"), "NAME" => array("varType" => "string"), "TIMESTAMP_X" => array("varType" => "string"), "LOGIN" => array("varType" => "string"), "PASSWORD" => array("varType" => "string"), "CHECKWORD" => array("varType" => "string"), "ACTIVE" => array("varType" => "string"), "LAST_NAME" => array("varType" => "string"), "EMAIL" => array("varType" => "string") ); $wsdesc->classes = array( "CCheckAuthWS" => array( "CheckAuthorization" => array( "type" => "public", "name" => "CheckAuthorization", "input" => array( "user" =>array("varType" => "string"), "password" =>array("varType" => "string") ), "output" => array( "user" => array("varType" => "CUser") ) ), "GetHTTPUserInfo" => array( "type" => "public", "name" => "GetHTTPUserInfo", "input" => array(), "output" => array( "user" => array("varType" => "CUser") ), "httpauth" => "Y" ) ) ); return $wsdesc; } ... }
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.