Документация для разработчиков
Темная тема

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" - значит, что параметр не обязательный. 
            //                    Его можно не передавать в soap запросе. "input" => array( // "ТипДанных" - название сложного или простого типа данных "ИмяПараметра" =>array("varType" => "ТипДанных"[, "strict" => "no"]), // Так описываются параметры - массивы // varType - название массива (как типа данных, для xsd схемы) // arrType - тип элементов массива "ИмяПараметра" =>array( "varType" => "ArrayOf"."ТипДанных", "arrType" => "ТипДанных" ), // Пример передачи сложных типов данных. // Сложные типы должны быть описаны в structTypes, classTypes "ИмяПараметра" =>array("varType" => "sGenTest"), // Пример передачи массива сложного типа (структуры) "ИмяПараметра" =>array( "varType" => "ArrayOfSGenTest", "arrType" => "sGenTest" ) ... // описание исходящих параметров "output" => array( // Здесь может быть описан только один исходящий параметр "user" => array("varType" => "ТипДанных") ), // требуется ли для вызова метода пройти HTTP Basic авторизацию. "httpauth" => "Y или N" ), ... ), ... );
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;
	}
    
	...
}


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх