La elección del protocolo es una de las primeras decisiones que hay que tomar en la creación de un web service; existen varios métodos:
- SOAP: es un protocolo para el intercambio de información entre ordenadores (independientemente del sistema y del lenguaje); puede usar distintos protocolos, pero aquí el que nos interesa es HTTP, utiliza XML como encapsulamiento de datos; lo normal sería tener un XML de definición de servicio (que es un XML que describe los métodos que se pueden usar y los parámetros a pasar). Es considerablemente lento, ya que aparte del tamaño de la llamada, esta requiere una gran cantidad de flujo de información. La manera normal de usarlo sería: el cliente pide el XML de definición, el servidor lo sirve, el cliente lo procesa y crea una llamada de acuerdo a esta definición, el servidor recibe esta llamada y devuelve la respuesta a la llamada.
La manera normal de usarlo sería (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 petición devolvería los datos del producto con ese identificador.
Desde PHP 5 SOAP tiene soporte nativo, lo que lo hace muy fácil de usar para crear nuestra propia API o consumir servicios web de otra página; en otro post explicaré una manera fácil de hacerlo.
- REST: al igual que SOAP, es un protocolo para el intercambio de información 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 métodos propios de HTTP, los comúnmente conocidos y que manejan nuestros navegadores: GET y POST, y los menos conocidos pero igualmente útiles PUT y DELETE. Es un protocolo muchísimo más rápido que SOAP, ya que realmente SOAP es un REST con un montón de restricciones: de formato, de envío, de encapsulamiento...
La manera normal de usarlo sería:
- POST -> http://www.ejemplo.com/mensaje/nuevo (el método nos indica la acción a realizar, INSERTAR un nuevo dato, y la URL nos indicaría el qué, un nuevo mensaje; los parámetros que se envían con la petición nos dan los datos a insertar, titulo=nuevo titulo&mensaje=hola mundo)
- PUT -> http://www.ejemplo.com/mensaje/5 (el método nos indica la acción a realizar, MODIFICAR, y la URL el qué, el mensaje 5; los parámetros que se envían con la petición nos dan los datos a modificar, titulo=nuevo titulo 2&mensaje=adios mundo)
- GET -> http://www.ejemplo.com/mensaje/8 (el método nos indica la acción a realizar, MOSTRAR, y la URL el qué, el mensaje 8)
- DELETE -> http://www.ejemplo.com/mensaje/13/comentario/2 (el método nos indica la acción a realizar, BORRAR, y la URL el qué, el comentario 2 del mensaje 13)
PHP no tiene una librería específica para el manejo de peticiones REST, dado que no tendría sentido, ya que REST está 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.