En este post vamos a ver como crear un webservice con php y soap UI y para ello vamos a ver que es un webservice.
Antes de empezar recomiendo descargar:
- Wampserver / Xampp para el servidor local si aun no lo tienes.
- SoapUI
¿Que es?
Un webservice es una vía de comunicación entre diferentes maquinas conectadas en red.
Y está basado en un sistema de solicitudes y respuestas entre el cliente y el servidor.
Actualmente hay dos sistemas de comunicación SOAP y REST:
SOAP (Simple Object Access Protocol): Este sistema utiliza XML como lenguaje de intercanvio de datos entre cliente y servidor.
REST (Transferencia de Estado Representacional): Usa el Protocolo HTTP para la comunicación entre maquinas, y es soportado por todos los sistemas. Y actualmente es el sistema mas utilizado debido a su sencillez. Y utiliza el Lenguaje JSON.
Como crear un webservice con php y soap UI
Vamos a ello. «Let’s go!»
Para crear nuestro cliente y servidor, nos descargaremos el NuSOAP Toolkit, que nos ofrece diferentes clases i funciones que utilizaremos para crear nuestro Webservice basado en SOAP.
Una vez descargado el toolkit añadiremos la carpeta lib a nuestro Proyecto y crearemos un archivo PHP para cliente y otro para servidor.
Una vez creado el archivo server.php vamos a preparar el código que generara el XML del Servidor. El servidor que vamos a crear es muy sencillo, haremos un servidor con una función que devuelva el “buenas” y el texto que enviemos por webservice a través de nuestro cliente.
<?php
require_once «lib/nusoap.php»;
function Test($respuesta) {
return «Buenas «. $respuesta;
}
$server = new soap_server();
$server->soap_defencoding = ‘utf-8’;
$server->decode_utf8 = false;
$server->configureWSDL(«WStest», «urn:WStest»);
$server->register(«Test»,
array(«pregunta» => «xsd:string»),
array(«return» => «xsd:string»),
«urn:WStest»,
«urn:WStest#getProd»,
«rpc»,
«encoded»,
«Enviar mail de aviso»);
if ( !isset( $HTTP_RAW_POST_DATA ) ) $HTTP_RAW_POST_DATA =file_get_contents( ‘php://input’ );
$server->service($HTTP_RAW_POST_DATA);
?>
La etiqueta “$server->register” nos permite registrar las funciones en el webservice, ya que sin esto las funciones no aparecen a pesar de que existan y por lo tanto no podrían ser utilizadas.
El primer array: array («pregunta» => «xsd:string»)
Agregara las variables que el servidor tiene que recibir, en este caso solo 1 y del tipo “string”, pero si queremos tener varias, solo tenemos que separarlas por “,”. Por ejemplo:
array («texto1» => «xsd:string»,»texto2″ => «xsd:string»,»numero» => «xsd:int»)
El segundo array es para definir las variables a devolver.
Con esto ya tenemos nuestro servidor, y ahora prepararemos un cliente simple para acabar con nuestro ejemplo webservice. Este es nuestro cliente.php que consta de un formulario simple con un único campo que enviaremos a esta misma pagina.
<?php
require_once (‘lib/nusoap.php’);
$client = new nusoap_client(‘http://localhost/wdl2/server.php?wsdl’,true);
if(isset($_POST[‘name’])){
$res=$client->call(«Test»,array($_POST[‘name’]));
echo $res . «<br />» ;
}
?>
<form method=»post»
action=»<?php echo basename(__FILE__); ?>»>
<input name=’name’>
<input type=»submit» value=»enviar» name=’submit’/>
</form>
De esta pagina básicamente la parte que nos interesa es la variable $client, que básicamente definimos como una nuevo cliente soap del servidor que hemos creado. Y una vez creada la variable, la llamada a la función “Test” que tenemos en el servidor, a la cual le pasamos la variable del formulario:
$res=$client->call(«Test»,array($_POST[‘name’]));
Y como nos interesa saber la respuesta del servidor, o bien la guardamos en una variable como $res o bien podríamos imprimirla directamente.
Con esto finalizamos la creación de nuestro WebService y nuestra prueba con un cliente.