Creando y accediendo a servicios web con PHP

06 Agosto 2009 Publicado en Blog

Implementación de Web Services mediante PHP

Un web service es una aplicación que publica o expone sus funcionalidades o métodos mediante una interfaz. Funciona en modalidad cliente-servidor, es decir, otras aplicaciones se comunican con el web service utilizando mensajes en un formato estandar. En esencia la comunicación es la misma que cuando un servidor web retorna datos que han sido solicitados por un navegador tal como el tratamiento de un formulario HTML enviado por POST o una petición para ver una pagina. En este caso el formato de intercambio es el XML

Un web service se compone de los siguientes elementos:

 

  • XML

Formato estandar para el intercambio de datos diseñado principalmente para documentos Web. Su principal ventaja es que se pueden definir los tags o etiquetas a utilizar, esto fijara la manera en que los datos son interpretados y validados por las aplicaciones.

  • SOAP

Acrónimo de Simple Object Access Protocol. Es un protocolo de comunicación entre aplicaciones a través de mensajes, mediante el cual se instancian objetos de tipo web service y se invocan sus métodos. Fue concebido para brindar independencia de la plataforma y el lenguaje de implementación, dos aplicaciones cualesquiera, incluso escritas en diferentes lenguajes y corriendo en diferentes sistemas operativos, pueden peticionar servicios e intercambiar datos en forma totalmente transparente. SOAP esta basado en XML, esto quiere decir que los mensajes que las aplicaciones utilizan para comunicarse son archivos xml con una estructura predefinida.

Los mensajes SOAP deben estar contenidos en un elemento envoltorio (envelope) asociado con el espacio de nombres o namespace. Esto se especifica mediante:

xmlns:soap = "https://www.w3.org/2001/12/soap-envelope"

En este caso se utiliza el estandar definido en

https://www.w3.org/2001/12/soap-envelope

Mediante el encodingStyle se especifican donde se encuentran definidos los tipos de datos simples utilizados en el documento (pueden crearse tipos de datos complejos o estructuras a partir de estos tipos de datos). En el Header se incluye información específica del mensaje, como por ejemplo la autenticación. Dentro del body se inserta el cuerpo del mensaje, aqui se incorpora toda la información necesaria. Por ejemplo, si es una petición aqui se definen los parámetros para la ejecución, si es la respuesta a una petición, aqui se encontrara el resultado.

  • WSDL

Web Service Description Language es un estandar basado en XML que describe los accesos al Web Service. Indica cuales son las interfaces que brinda el servicio web, las operaciones, los mensajes y los tipos de datos necesarios para la utilización del mismo.

  • UDDI

Universal Discovery Description and Integration es un estandar que describe la naturaleza del servicio, sus capacidades, ubicación, y requerimientos de forma tal que este puede ser categorizado en sitios que ofrecen directorios de servicios web. UDDI utiliza WSDL para describir las interfaces de los web services. Algunos de los directorios de servicios web disponibles mas destacados son:

https://soapclient.com/uddisearch.html

https://uddi.org/find.html

Aplicabilidad

El protocolo principal utilizado en los servicios web es HTTP, los servicios web son capaces de montarse en otros protocolos (SMTP, FTP, etc.). Pero hay demasiadas restricciones en un ambiente como Internet, en donde los firewalls bloquean el acceso a dichos protocolos.

Implementación

Hay dos formas de implementar una llamada mediante SOAP con PHP, una de ellas es utilizar alguna biblioteca que ya posea la funcionalidad (las mas conocidas son Nusoap y PEAR pero a partir de la versión 5, PHP da soporte nativo a SOAP de modo que es esta la que se utilizará en el ejemplo.

Para implemementar una llamada utilizando SOAP primero se debe controlar que el soporte nativo de PHP este habilitado en el servidor, busque estas lineas de código en al archivo de configuración de PHP y descoméntelas.

[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used
; instead of original one.
soap.wsdl_cache_ttl=86400

Si creamos un script de comprobación con phpinfo() se debería ver algo similar a esto:

soap
 Soap Client  enabled
 Soap Server  enabled

Una vez completado esto, el resto del proceso es bien simple

array(26) {
 [0]=> string(70) "ProductInfo KeywordSearchRequest(KeywordRequest $KeywordSearchRequest)"
 [1]=> string(79) "ProductInfo TextStreamSearchRequest(TextStreamRequest $TextStreamSearchRequest)"
 [2]=> string(64) "ProductInfo PowerSearchRequest(PowerRequest $PowerSearchRequest)"
 [3]=> string(79) "ProductInfo BrowseNodeSearchRequest(BrowseNodeRequest $BrowseNodeSearchRequest)"
 [4]=> string(61) "ProductInfo AsinSearchRequest(AsinRequest $AsinSearchRequest)"
 [5]=> string(75) "ProductLineArray BlendedSearchRequest(BlendedRequest $BlendedSearchRequest)"
 [6]=> string(58) "ProductInfo UpcSearchRequest(UpcRequest $UpcSearchRequest)"
 [7]=> string(58) "ProductInfo SkuSearchRequest(SkuRequest $SkuSearchRequest)"
 [8]=> string(67) "ProductInfo AuthorSearchRequest(AuthorRequest $AuthorSearchRequest)"
 [9]=> string(67) "ProductInfo ArtistSearchRequest(ArtistRequest $ArtistSearchRequest)"
 [10]=> string(64) "ProductInfo ActorSearchRequest(ActorRequest $ActorSearchRequest)"
 [11]=> string(85) "ProductInfo ManufacturerSearchRequest(ManufacturerRequest $ManufacturerSearchRequest)"
 [12]=> string(73) "ProductInfo DirectorSearchRequest(DirectorRequest $DirectorSearchRequest)"
 [13]=> string(83) "ListingProductDetails ExchangeSearchRequest(ExchangeRequest $ExchangeSearchRequest)"
 [14]=> string(76) "ProductInfo ListManiaSearchRequest(ListManiaRequest $ListManiaSearchRequest)"
 [15]=> string(73) "ProductInfo WishlistSearchRequest(WishlistRequest $WishlistSearchRequest)"
 [16]=> string(90) "SellerProfile SellerProfileSearchRequest(SellerProfileRequest $SellerProfileSearchRequest)"
 [17]=> string(68) "SellerSearch SellerSearchRequest(SellerRequest $SellerSearchRequest)"
 [18]=> string(88) "MarketplaceSearch MarketplaceSearchRequest(MarketplaceRequest $MarketplaceSearchRequest)"
 [19]=> string(79) "ProductInfo SimilaritySearchRequest(SimilarityRequest $SimilaritySearchRequest)"
 [20]=> string(83) "ShoppingCart GetShoppingCartRequest(GetShoppingCartRequest $GetShoppingCartRequest)"
 [21]=> string(89) "ShoppingCart ClearShoppingCartRequest(ClearShoppingCartRequest $ClearShoppingCartRequest)"
 [22]=> string(98) "ShoppingCart AddShoppingCartItemsRequest(AddShoppingCartItemsRequest $AddShoppingCartItemsRequest)"
 [23]=> string(107) "ShoppingCart RemoveShoppingCartItemsRequest(RemoveShoppingCartItemsRequest $RemoveShoppingCartItemsRequest)"
 [24]=> string(107) "ShoppingCart ModifyShoppingCartItemsRequest(ModifyShoppingCartItemsRequest $ModifyShoppingCartItemsRequest)"
 [25]=> string(118) "GetTransactionDetailsResponse GetTransactionDetailsRequest(GetTransactionDetailsRequest $GetTransactionDetailsRequest)"
}

Como se puede apreciar este es el listado de todos los métodos expuestos por el web service de amazon.

Recursos:

https://www.sitepoint.com/article/own-web-service-php-xml-rpc/

https://www.builderau.com.au/program/php/soa/Powerful-Web-Services-with-PHP-and-SOAP/0,339028448,339288552,00.htm

Serfe info(at)serfe.com https://www.serfe.com/images/serfe_logo_text.png https://www.serfe.com/images/serfe_logo_text.png FALUCHO 2032, S3016LDB, SANTO TOME, SANTA FE, ARGENTINA 1-305-5375397