nu soap
TRANSCRIPT
Curso introductorio a los servicios web
Jorge Lpez Prez Universidad de Sevilla
1 de diciembre de 2008
ndice
NuSOAP Servidor Ejercicios REST Conceptos Ejemplo comentado Conclusiones nales
2 de 23
ndice
NuSOAP Servidor Ejercicios REST Conclusiones nales
3 de 23
NuSOAP: servidor SOAP (I)
NuSOAP genera al vuelo el documento WSDL para nuestro servidor en http://..../servidor.php?wsdl Crear un servidor requiere mayor conocimiento de cmo est estructurado WSDL La principal dicultad est en denir tipos complejos, si los hubiera
4 de 23
NuSOAP: servidor SOAP (II)Denicin de una funcin:function mifuncion ( $p1 , $p2 , $p3 , ...) { // Procesado // Errores ? if ( hayErrorCliente ()) { return new soap_fault ( Client , , El parametro X es invalido ); } else if ( hayErrorServidor ()) { return new soap_fault ( Server , , Ocurrio un error en el servidor ); } else { return $valorPHP ; } }5 de 23
NuSOAP: servidor SOAP (III)Publicacin del servicio SOAP:$server = new soap_server ; // Par ametros para WSDL ( sin ellos no se genera ) $namespace = urn : MIwsdl ; $server - > configureWSDL ( MIwsdl , $namespace ); $server - > register ( " mifuncion " , // nombre array ( nombre = > xsd : string ) , // entrada array ( return = > xsd : string ) , // salida $namespace , // namespace $server - > wsdl - > endpoint . # mifuncion , // SOAPAaction ( x ) rpc , // estilo de m etodo encoded , // uso de par ametros Hace ... // documentaci on ); $server - > service ( $rawPost ); // $rawPost = documento de POST6 de 23
Servidor para holaMundo
Hay que crear la funcin hola Recordemos que NuSOAP genera el WSDL bajo demanda WSDL: URL 1; cliente local: URL 27 de 23
Servidor para calculadora
Hay que completar el chero calcServ.php WSDL: URL 3; cliente local: URL 4
8 de 23
NuSOAP: servidor SOAP (IV)Creacin de un tipo complejo: addComplexType La mayora de parmetros son opcionales$server - > wsdl - > addComplexType ( nombretipo , // nombre complexType , struct , // array o struct ( mapa hash ) all , // composici on XSD ( all , sequence , choice ) , // restricci on base ( namespace : nombre ) array (...) , // elementos del tipo array (...) // atributos del tipo ..... // tipo de array , si lo es );
9 de 23
NuSOAP: servidor SOAP (V)
Ejemplo de creacin del tipo alumno< xsd:element name = " alumno " > < xsd:complexType > < xsd:sequence > < xsd:element maxOccurs = " 1 " minOccurs = " 1 " name = " nombre " type = " xsd:string " / > < xsd:element maxOccurs = " unbounded " minOccurs = " 0 " name = " telefono " type = " xsd:string " / >
10 de 23
NuSOAP: servidor SOAP (V)Ejemplo de creacin del tipo alumno$server - > wsdl - > addComplexType ( alumno , // nombre complexType , struct , // tipo asociativo all , // xsd : all , // sin restr . de namespace array ( nombre = > array ( name = > nombre , type = > xsd : string ) , telefono = > array ( name = > telefono , type = > xsd : string , minOccurs = > 1 , maxOccurs = > unbounded ) ) 10 ); de 23
NuSOAP: servidor SOAP (y VI)Ejemplo de creacin del tipo alumnado (array de alumno)$server - > wsdl - > addComplexType ( alumnado , complexType , array , , SOAP - ENC : Array , array () , array ( array ( ref = > SOAP - ENC : arrayType , wsdl : arrayType = > tns : alumno [] ) ), tns : alumno );11 de 23
ndice
NuSOAP REST Conceptos Ejemplo comentado Conclusiones nales
12 de 23
REST: conceptos
Siglas de Representational State Transfer No es un estndarTesis doctoral de Roy Fielding, 2001 Que no cunda el pnico: la arquitectura cliente-servidor tampoco lo es Cada servicio REST est hecho al gusto
Una ruta (URI) equivale a un recurso Uso extensivo de los mtodos HTTP
13 de 23
REST: URI = recurso
No es algo tan raro: lo usamos cada da en la web Deniremos los recursos y las URIs a nuestro gusto Algunos ejemplos:/alumnos: todos los alumnos /alumnos/4293845: alumno con DNI 4293845 /existencias/jamon/4/5: existencias del jamn de marca 4 en la estantera 5 de un almacn
14 de 23
REST: uso de los mtodos HTTP (I)
Cmo interacta el cliente con los recursos?
15 de 23
REST: uso de los mtodos HTTP (I)
Cmo interacta el cliente con los recursos? Con los mtodos que HTTP proveeGET POST PUT DELETE
15 de 23
REST: uso de los mtodos HTTP (y II)
Recomendaciones sobre el uso de los mtodos: GET POST PUT DELETE obtencin de un recurso creacin de nuevo recurso actualizacin de un recurso eliminacin de un recurso
Se recomienda que ante un POST el servicio devuelva la URL del recurso creado
16 de 23
REST: lenguaje usado
El desarrollador decide qu formato usan las peticiones y las respuestas del servicio (independientes) Las especicaciones de los formatos deben entregarse a los posibles clientes
17 de 23
Ejemplo: coleccin de pelculas
Cada pelcula tiene asociados unos atributos (ttulo, director, etc)
18 de 23
Ejemplo: coleccin de pelculas. Decisiones (I)
URL de los recursos:http://servicio/peliculas: listado de las pelculas en la base de datos http://servicio/peliculas/peli : pelcula con identicador peli .Ej.: http://servicio/peliculas/938456 es el recurso Pelcula Shrek 3
19 de 23
Ejemplo: coleccin de pelculas. Decisiones (II)Acciones sobre http://servicio/pelculas y respuestas GET obtencin de listado de pelculas POST creacin de una nueva pelcula. Respuesta: URL de la nueva pelcula PUT DELETE Acciones sobre http://servicio/pelculas/peli y respuestas GET obtencin de datos de la pelcula POST PUT actualizacin de datos de la pelcula DELETE borrado de la pelcula
20 de 23
Ejemplo: coleccin de pelculas. Decisiones (y III)Formato de las peticiones: parmetros sin ms. Sin XML (qu alivio). Ejemplo: POST /peliculas HTTP/1.1 titulo=Big%20Fish director=Tim%20Burton anyo=2003 ... Formato de las respuestas: XML. Cumplir cierto XSD que denamos. Ejemplo: < pelicula > < titulo > Shrek 3 < director > Chris Miller ... 21 de 23
ndice
NuSOAP REST Conclusiones nales
22 de 23
Por n!
Los servicios web no estn restringidos a su consumo desde la webUn programa de consola, una aplicacin grca, un servicio LDAP... todos podran hacer uso de un servicio web
Espero no haberos aburrido demasiado Jorge, las pegatinas
23 de 23