Tabla de contenidos
- 66.1. Zend_Soap_Server
- 66.2. Zend_Soap_Client
- 66.3. Accesor WSDL
- 66.3.1. Constructor de Zend_Soap_Wsdl
- 66.3.2. Método addMessage()
- 66.3.3. Método addPortType()
- 66.3.4. Método addPortOperation()
- 66.3.5. Método addBinding()
- 66.3.6. Método addBindingOperation()
- 66.3.7. Método addSoapBinding()
- 66.3.8. Método addSoapOperation()
- 66.3.9. Método addService()
- 66.3.10. Correspondencia de tipos
- 66.3.11. Método addDocumentation()
- 66.3.12. Obtener el documento WSDL finalizado
- 66.4. AutoDiscovery
La clase Zend_Soap_Server tiene como objetivo simplificar el desarrollo
de la parte servidora de servicios web para los programadores de PHP.
Puede usarse en modo WSDL o no-WSDL, y utilizando clases o funciones para definir la API del servicio web.
Cuando el componente Zend_Soap_Server funciona en modo WSDL, utiliza
un documento WSDL ya preparado para definir el comportamiento del objeto servidor y las
opciones de la capa de transporte.
El documento WSDL puede generarse automáticamente con la funcionalidad proporcionada por
el componente Zend_Soap_AutoDiscovery
o puede construirse manualmente usando la clase Zend_Soap_Wsdl o cualquier otra
herramienta de generación de XML.
Si se usa el modo no-WSDL, entonces todas las opciones del protocolo deben establecerse mediante el mecanismo de opciones.
El constructor de Zend_Soap_Server debe usarse de forma algo
diferente para los modos WSDL y no-WSDL.
El constructor de Zend_Soap_Server admite dos parámetros
opcionales cuando funciona en modo WSDL:
$wsdl, que es una URI de un archivo WSDL [22].-
$options- opciones para crear el objeto servidor SOAP [23].Las siguientes opciones se reconocen en el modo WSDL:
'soap_version' ('soapVersion') - versión de soap a usar (SOAP_1_1 o SOAP_1_2).
'actor' - la URI del actor para el servidor.
-
'classmap' ('classMap') que puede usarse para mapear algunos tipos WSDL a clases PHP.
La opción debe ser un array con los tipos WSDL como claves y los nombres de las clases PHP como valores.
'encoding' - codificación de caracteres interna (UTF-8 se usa siempre como codificación externa).
'wsdl' que equivale a la llamada
setWsdl($wsdlValue).
El primer parámetro del constructor debe establecerse en
NULL si se planea usar la funcionalidad de
Zend_Soap_Server en modo no-WSDL.
También hay que establecer la opción 'uri' en este caso (ver más abajo).
El segundo parámetro del constructor ($options) es un array
con opciones para crear el objeto servidor SOAP
[24].
Las siguientes opciones se reconocen en el modo no-WSDL:
'soap_version' ('soapVersion') - versión de soap a usar (SOAP_1_1 o SOAP_1_2).
'actor' - la URI del actor para el servidor.
-
'classmap' ('classMap') que puede usarse para mapear algunos tipos WSDL a clases PHP.
La opción debe ser un array con los tipos WSDL como claves y los nombres de las clases PHP como valores.
'encoding' - codificación de caracteres interna (UTF-8 se usa siempre como codificación externa).
'uri' (obligatorio) - espacio de nombres URI para el servidor SOAP.
Hay dos formas de definir la API del servicio web cuando se quiere dar acceso al código PHP a través de SOAP.
La primera consiste en adjuntar una clase al objeto Zend_Soap_Server
que debe describir completamente la API del servicio web:
...
class MyClass {
/**
* This method takes ...
*
* @param integer $inputParam
* @return string
*/
public function method1($inputParam) {
...
}
/**
* This method takes ...
*
* @param integer $inputParam1
* @param string $inputParam2
* @return float
*/
public function method2($inputParam1, $inputParam2) {
...
}
...
}
...
$server = new Zend_Soap_Server(null, $options);
// Bind Class to Soap Server
$server->setClass('MyClass');
// Bind already initialized object to Soap Server
$server->setObject(new MyClass());
...
$server->handle();
![]() |
¡Importante! |
|---|---|
Debería describir completamente cada método usando el docblock del método si planea usar la funcionalidad de autodescubrimiento para preparar el WSDL correspondiente del servicio web. |
El segundo método para definir la API del servicio web es usar un
conjunto de funciones y los métodos addFunction() o
loadFunctions():
...
/**
* This function ...
*
* @param integer $inputParam
* @return string
*/
function function1($inputParam) {
...
}
/**
* This function ...
*
* @param integer $inputParam1
* @param string $inputParam2
* @return float
*/
function function2($inputParam1, $inputParam2) {
...
}
...
$server = new Zend_Soap_Server(null, $options);
$server->addFunction('function1');
$server->addFunction('function2');
...
$server->handle();
![]() |
Avanzado |
|---|---|
Esta sección describe opciones avanzadas de procesamiento de peticiones/respuestas y puede omitirse. |
El componente Zend_Soap_Server realiza el procesamiento de
peticiones/respuestas automáticamente, pero permite interceptarlo y realizar cierto
pre y post-procesamiento.
El método Zend_Soap_Server::handle() toma la petición del
flujo de entrada estándar ('php://input'). Puede sobrescribirse ya sea
proporcionando un parámetro opcional al método handle() o
estableciendo la petición mediante el método setRequest():
... $server = new Zend_Soap_Server(...); ... // Set request using optional $request parameter $server->handle($request); ... // Set request using setRequest() method $server->setRequest(); $server->handle();
El objeto de petición puede representarse usando cualquiera de los siguientes:
DOMDocument (convertido a XML)
DOMNode (se toma el documento propietario y se convierte a XML)
SimpleXMLElement (convertido a XML)
stdClass (se llama a __toString() y se verifica que sea XML válido)
string (se verifica que sea XML válido)
La última petición procesada puede recuperarse usando el método
getLastRequest() como una cadena
XML:
... $server = new Zend_Soap_Server(...); ... $server->handle(); $request = $server->getLastRequest();
El método Zend_Soap_Server::handle() emite automáticamente la
respuesta generada al flujo de salida. Esto puede bloquearse usando
setReturnResponse() con TRUE o
FALSE como parámetro
[25].
En este caso, el método handle() devuelve la respuesta
generada.
... $server = new Zend_Soap_Server(...); ... // Get a response as a return value of handle() method // instead of emitting it to the standard output $server->setReturnResponse(true); ... $response = $server->handle(); ...
La última respuesta también puede recuperarse mediante el método
getLastResponse() para algún post-procesamiento:
... $server = new Zend_Soap_Server(...); ... $server->handle(); $response = $server->getLastResponse(); ...
[22]
Puede establecerse más tarde usando el método
setWsdl($wsdl).
[23]
Las opciones pueden establecerse más tarde usando el método
setOptions($options).
[24]
Las opciones pueden establecerse más tarde usando el método
setOptions($options).
[25]
El estado actual del indicador Return Response puede consultarse con el
método setReturnResponse().
![[Note]](images/note.png)