- 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
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/