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; } ... }