la elecccion del protocolo, es una de las primeras decisiones que hay que tomar en la creaccion de un web service, existen varios metodos:
- SOAP: es un protocolo para el intercambio de informacion entre ordenadores (independientemente del sistema, y del lenguaje), puede usar distintos protocolos, pero aqui el que nos interesa es HTTP, utiliza XML como encapsulamiento de datos, lo normal seria tener un xml de definicion de servicio( que es un xml que describe los metodos que se puedesn usar y los parametros a pasar). Es considerablemente lento, ya que aparte del tamaño de la llamada esta requiere una gran cantidad de flujo de informacion. La manera normal de usarlo seria, el cliente pide el xml de definicion, el servidor lo sirve, el cliente lo procesa y crea una llamada de acuerdo a esta definicion, el servidor recibe esta llamada y devuelve la respuesta al la llamada.
La manera normal de usarlo seria (ejemplo de wikipedia):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getProductDetails xmlns="http://warehouse.example.com/ws">
<productId>827635</productId>
</getProductDetails>
</soap:Body>
</soap:Envelope>
Esta peticion devolveria los datos del producto con ese identificador.
Desde PHP 5 soap tiene soporte nativo, lo que lo hace muy facil de usar para crear nuestra propia API o consumir servicios web de otra pagina, en otro post explicare una manera facil de hacerlo.
- REST: al igual que SOAP es un protocolo para el intercambio de informacion entre ordenadores, pero solo puede usarse con el protocolo HTTP, que por otro lado es el que nos interesa. No tiene restricciones en cuanto a encapsulamiento de datos, podemos enviarlos y recibirlos de la manera que queramos JSON, XML, HTML, CSV... y utiliza los metodos propios de HTML, los comunmente conocidos y que manejan nuestros navegadores: GET y POST, y los menos conocidos pero igualmente utiles PUT y DELETE. Es un protocolo muchisimo mas rapido que SOAP, ya que realmente SOAP es un REST con un monton de restricciones, de formato, de envio, de encapsulamiento...
La manera normal de usarlo seria:
- POST -> http://www.ejemplo.com/mensaje/nuevo (el metodo nos indica la accion a realizar, INSERTAR un nuevo dato y la url nos indicaria el que, un nuevo mensaje, los parametros que se envian con la peticion, nos dan los datos a insertar, titulo=nuevo titulo&mensaje=hola mundo)
- PUT -> http://www.ejemplo.com/mensaje/5 (el metodo nos indica la accion a realizar, MODIFICAR y la url el que, el mensaje 5, los parametros que se envian con la peticion, nos dan los datos a modificar, titulo=nuevo titulo 2&mensaje=adios mundo)
- GET -> http://www.ejemplo.com/mensaje/8 (el metodo nos indica la accion a realizar, MOSTRAR y la url el que, el mensaje 8)
- DELETE -> http://www.ejemplo.com/mensaje/13/comentario/2 (el metodo nos indica la accion a realizar, BORRAR y la url el que, el comentario 2 del mensaje 13)
PHP no tiene una libreria especifica para el manejo de peticiones REST, dado que no tendria sentido, ya que REST esta basado en el mismo protocolo que la web, por lo tanto no se puede distinguir a priori entre peticiones al web service y peticiones normales de web.