Cómo poner la tecnología del JABÓN en ejecucio'n


  Share  
|

Como RESTO, poner el JABÓN en ejecucio'n implica el generar de peticiones y después el manejar de la respuesta. Mientras que la manipulación de la respuesta del JABÓN es similar al resultado del RESTO, la generación de la petición del JABÓN es absolutamente diferente.

Generación De Peticiones

Desemejante de RESTO, es algo infrecuente ver las peticiones generadas manualmente, aunque puede todavía ser hecha. Generalmente, las peticiones del JABÓN se generan con una herramienta genérica (como NuSOAP o Pear:SOAP) o con una clase application-specific o el módulo. La generación manual se cubre aquí (una buena comprensión de cómo trabaja vendrá en útil), así como NuSOAP.

Las herramientas application-specific van a ser no hechas caso, por razones de un par. Por la definición son específico del uso, y por lo tanto no muy útiles en este artículo genérico. En segundo lugar, las herramientas tienen interfaces y niveles de la funcionalidad que varían, y para hacer la justicia del asunto que requeriría una mirada profundizada. Finalmente, soy firmemente de la opinión que si usted puede calcular fuera de cómo hacerle el trabajo con NuSOAP (o crudo, para esa materia), usted puede conseguir la herramienta application-specific para trabajar también.

Generación Manual

La generación de peticiones del JABÓN no es manualmente demasiado diferente de generar peticiones del RESTO. El proceso de generar la petición y realmente de transmitirla está partido en dos funciones separadas, para demostrar propósitos.

Para generar la petición sí mismo, he elegido utilizar una secuencia pregenerated, y pueblo simplemente los valores requeridos en el tiempo de pasada. Hay opciones más complejas (tales como crear el documento dentro de SimpleXML, o crearlo del rasguño cada uno funcionado), pero realmente no se requieren:

functioncreaterequest($devkey, #, #, #)
{
$request = "<?xmlversion=\"1.0 \ "= de codificación \" UTF-8 \ "standalone=\"no \ "? >
< SOAP-ENV:Envelope
/ \ "de xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema \"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance \" >
< SOAP-ENV:Body >
< devkey xsi:type=\"xsd:int\">$devkey</devkey >
< acción xsi:type=\"xsd:string\">$action</action >
< mecanografíe xsi:type=\"xsd:string\">$type</type >
< palabra clave xsi:type=\"xsd:string\">$keyword</keyword >
</SOAP-ENV:Body >
</SOAP-ENV:Envelope > ";
vuelta #;
}

Como usted puede decir, la función es alrededor tan simple justo como puede conseguir. Observe que las variables URL-NO se han codificado; eso es porque no se están enviando en el URL (los sonidos obvios, solamente él son también fáciles de faltar).

Realmente, llamar el API para transmitir la petición implica el pedir prestado de un cierto código del primer ejemplo del RESTO, porque la petición será enviada crudo este vez.

functioncallsoapapi($data)
{
$url = "http://library.example.com/api/soap/search";
$url_info = parse_url($url);
anfitrión de $host =‘de $url_info[ ' ];
trayectoria de $path =‘de $url_info[ ' ];

Habría podido apenas poblar las variables de $host y de $path en el comienzo, pero éste debe estar más claro. En un sistema de producción, usted podría ahorrar algunos ciclos de la CPU hardcoding estos elementos.

#, 80);
fputs($fp, "CONSIGUEN". "HTTP/1.1\r\n de $path");
fputs($fp, "anfitrión: ". # ");
fputs($fp, "aceptan: */* \r\n");
fputs($fp, "Accept-Charset:ISO-8859-1, utf-8;q=0.7, *;q=0.7\r\n");
fputs($fp, "Connection:close\r\n");
fputs($fp, "Content-Type:application/soap+xml\r\n");
fputs($fp, "Contenido-Longitud: ".strlen($data). "\r\n\r\n");
fputs($fp, "# ");

Este bloque es casi idéntico al ejemplo anterior. El ejemplo anterior era una petición del POSTE, mientras que esto es una petición del CONSEGUIR, un cambio por el cual será dictado con cualquier API usted está trabajando. El Contenido-Tipo jefe es diferente reflejar exactamente lo que usted está enviando y este vez por supuesto usted tiene $data a enviar, así que la Contenido-Longitud no será 0.

# = "";
while(!feof($fp))
{
#, 128);
}
fclose($fp);
list($http_headers, $http_content)=explode("\r\n\r\n", #);
vuelta #;
}

Esta sección es también idéntica al ejemplo del RESTO. Envolver ambas esas funciones para recuperar una respuesta está solamente apenas digno de mencionar:

$request = createRequest('123 ', ' búsqueda ', ' book', 'style);
# = callsoapapi($request);

¡No era demasiado duro!

Desemejante de RESTO, usted no puede apenas utilizar el file_get_contents() para golpear el API, porque usted necesita enviar el cuerpo de XML con el file_put_contents() de la petición no trabajará tampoco, porque usted necesita las vueltas de la respuesta (file_put_contents() un interno), pero hay otras opciones. La pera (http://pear.php.net), por ejemplo, tiene un manojo de las funciones HTTP-ESPECI'FICAS que pueden tomar algo del dolor de cabeza manualmente de crear la petición de sus manos, pero todavía no le prohibe toda la flexibilidad que usted consigue con la creación manual.

Generación con NuSOAP

Para cualquier cosa con excepción de un programa paso a paso, recomendaría definitivamente el ir con una cierta clase de un módulo del JABÓN a hacer su vida de la codificación más fácil. Aunque, si usted funciona en problemas, seguirlos abajo pueden ser un poco un dolor. Tengo gusto de usar una caja local del desarrollo durante el desarrollo, así que comienzo de las cosas que va mal yo puedo utilizar un succionador de paquete para mirar el request/response en su forma cruda.

Conceptual, usar NuSOAP no es demasiado diferente de terminar la tarea manualmente. Se inicializa el objeto, se crea la carga útil, y se envía la petición. La diferencia dominante aquí es que NuSOAP está haciendo todo el trabajo sucio.

require('../lib/nusoap.php ');
$client = soapclient("http://library.example.com/api/soap/wsdl nuevo/", verdad);

Aquí el objeto de $client se crea. Dos opciones están disponibles al crear un soapclient nuevo: Usted puede o especificar el archivo del wsdl para el servicio (y fijar el segundo parámetro para verdad), o especifique la punto final para la llamada (y fije el segundo parámetro a falso). Siempre que sea posible, tenga gusto de utilizar el archivo del wsdl; el módulo de NuSOAP puede coger algunos de sus errores de que la manera, y él asegure que diferente solicite los tipos que todos van a la punto final correcta.

$params = array(
' devkey ' = > ' 123',
' acción ' = > ' búsqueda ',
' tipo ' = > ' libro ',
' palabra clave ' = > ' estilo '
);

La preparación de los parámetros para la transmisión es métodos de un pedacito más fácilmente que anterior.

# = ' http://library.example.com ';
$action = ' http://library.example.com/api/soap/search ';
$method = "SearchRequest";
$result = # call($method>,
array(‘SearchRequest ' = > #),
#, #);

Finalmente, se fijan los últimos parámetros, y se hace la llamada sí mismo.

Manipulación de la respuesta

La manipulación de una respuesta de una petición del JABÓN no es otra vez demasiado diferente de la respuesta del RESTO que—ambas se proporcionan en formatos similares de XML. La respuesta del JABÓN lleva los elementos adicionales del sobre y del cuerpo, pero a menudo datos del presente de una manera similar dentro de esos elementos. Hay por supuesto una cierta variación entre la manipulación de la respuesta de una petición manual y de una petición de NuSOAP. Ambos métodos se presentan aquí.

Manualmente análisis de la respuesta

Mímico la salida generada con la petición del RESTO utiliza código similar, con algunas modificaciones para el esquema de la encapsulación usado con el JABÓN.

el echo"You buscó for:{$xml->Body->LibrarySearchResponse->RequestInfo - >
keyword}<br > ";

el echo"Here es your{$xml->Body->LibrarySearchResponse->ResponseInfo- > ResultCount}
results<br > ";
foreach($xml->Body->LibrarySearchResponse->ResponseInfo->Item COMO &$item)
{
repita "{# title>} by{$item->Author}<br >";
}

Esto generará salida idéntica como la petición del RESTO demostrada anterior. Observe el diverso sintaxis usado para adquirir la palabra clave de la búsqueda. No es una cualidad este vez, así que el acceso es diferente.

Análisis de la respuesta con NuSOAP

Tener acceso al objeto proporcionado por NuSOAP es un poco diferente de los métodos usados con SimpleXML, pero la estructura de datos interna es absolutamente similar. La modificación del código para trabajar con el objeto de NuSOAP toma solamente algunos momentos.

el echo"You buscó para: ".
# ' ] "<br >";
el echo"Here es su
{# ' ]}
results<br > ";
foreach($xml['Body']['LibrarySearchResponse']['ResponseInfo']['Item ' ] COMO &$item)
{
eco "{#‘título ' ]} by{$item[‘Author']}<br >";
}

Con NuSOAP, los datos internos son mucho alcanzado la misma manera que un arsenal sociable, tan más bien que el método de OO de usar - > tener acceso a elementos del niño, la información adicional del arsenal es incluida. Este elemento hará salir idénticamente al ejemplo anterior.

El JABÓN es un método eficaz de preguntar APIs cuando los gastos indirectos adicionales son permitidos. La encapsulación de todos los elementos permite la lectura fácil, y el alcance variable dentro de la petición. Crear peticiones del JABÓN puede ser tan fácil como la escritura ellas hacia fuera una vez, entonces las variables dominantes que substituyen justas. Alternativomente, puede también ser lograda usando una herramienta tal como NuSOAP. Tener acceso a la respuesta del JABÓN se puede lograr en mucho la misma manera que la respuesta del RESTO cuando la petición se ha terminado manualmente. En el caso de las peticiones terminadas con NuSOAP, el método de acceso es estructural idéntico, con solamente algunos cambios de menor importancia al sintaxis usado.

esto es un artículo agregado por Emanuela Hedrick


Share  

© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions