Servicios Web -Web Services- 0. Seminario de sistemas 1
Last updated Oct 5, 2021
by
sr_labs Admin
Un web service es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como internet.
## El [W3C](https://es.m.wikipedia.org/wiki/W3C "W3C") define un servicio web como:
Un servicio web es un sistema software diseñado para soportar la interacción máquina-a-máquina, a través de una red, de forma interoperable. Cuenta con una interfaz descrita en un formato procesable por un equipo informático (específicamente en [WSDL](https://es.m.wikipedia.org/wiki/Web_Services_Description_Language "Web Services Description Language")), a través de la que es posible interactuar con el mismo mediante el intercambio de mensajes [SOAP](https://es.m.wikipedia.org/wiki/SOAP "SOAP"), típicamente transmitidos usando serialización [XML](https://es.m.wikipedia.org/wiki/XML "XML") sobre [HTTP](https://es.m.wikipedia.org/wiki/HTTP "HTTP") conjuntamente con otros estándares web.
![Webservice](file-guid:41085814-38d4-4bf3-959b-7f2e820820a9 "Webservice_va.jpg")
## **Arquitectura**
![220px-Webservices.png](file-guid:9bc924e1-b3b5-4382-8623-e4d404f28f82 "220px-Webservices.png")
En la arquitectura de servicios web existen tres partes: proveedor de servicios web, el que pide el servicio web y el publicador. El proveedor de servicios envía al publicador del servicio un fichero [WSDL](https://es.m.wikipedia.org/wiki/WSDL "WSDL") con la definición del servicio web. El que pide el servicio contacta con el publicador y descubre quién es el proveedor (protocolo WSDL) y contacta con el proveedor (protocolo [SOAP](https://es.m.wikipedia.org/wiki/SOAP "SOAP")). El proveedor valida la petición de servicio y envía el dato estructurado en formato XML utilizando el protocolo SOAP. El fichero XML es validado de nuevo por el que pide el servicio utilizando un fichero [XSD](https://es.m.wikipedia.org/wiki/XSD "XSD").
## Estándares empleados
* *[Web Services Protocol Stack](https://es.wikipedia.org/wiki/Web_Services_Protocol_Stack "Web Services Protocol Stack")*: conjunto de servicios y protocolos de los servicios web.
* [XML](https://es.wikipedia.org/wiki/XML "XML") (*[Extensible Markup Language](https://es.wikipedia.org/wiki/Extensible_Markup_Language "Extensible Markup Language")*): formato estándar para los datos que se vayan a intercambiar.
* [SOAP](https://es.wikipedia.org/wiki/Simple_Object_Access_Protocol "Simple Object Access Protocol") (*Simple Object Access Protocol*) o [XML-RPC](https://es.wikipedia.org/wiki/XML-RPC "XML-RPC") (*XML Remote Procedure Call*): protocolos sobre los que se establece el intercambio.
* Otros protocolos: los datos en XML también pueden enviarse de una aplicación a otra mediante protocolos normales como *[Hypertext Transfer Protocol](https://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol "Hypertext Transfer Protocol")* ([HTTP](https://es.wikipedia.org/wiki/HTTP "HTTP")), *[File Transfer Protocol](https://es.wikipedia.org/wiki/File_Transfer_Protocol "File Transfer Protocol")* (FTP), o *[Simple Mail Transfer Protocol](https://es.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol "Simple Mail Transfer Protocol")* (SMTP).
* [WSDL](https://es.wikipedia.org/wiki/WSDL "WSDL") (*Web Services Description Language*): es el lenguaje de la interfaz pública para los servicios web. Es una descripción basada en XML de los requisitos funcionales necesarios para establecer una comunicación con los servicios web.
* [UDDI](https://es.wikipedia.org/wiki/UDDI "UDDI") (*Universal Description, Discovery and Integration*): protocolo para publicar la información de los servicios web. Permite comprobar qué servicios web están disponibles.
* [WS-Security](https://es.wikipedia.org/wiki/WS-Security "WS-Security") (*Web Service Security*): protocolo de seguridad aceptado como estándar por [OASIS](https://es.wikipedia.org/wiki/OASIS_(organizaci%C3%B3n) "OASIS (organización)") (*Organization for the Advancement of Structured Information Standards*). Garantiza la autenticación de los actores y la confidencialidad de los mensajes enviados.
* [REST](https://es.wikipedia.org/wiki/REST "REST") (*Representational State Transfer*): arquitectura que, haciendo uso del protocolo [HTTP](https://es.wikipedia.org/wiki/HTTP "HTTP"), proporciona una [API](https://es.wikipedia.org/wiki/API "API") que utiliza cada uno de sus métodos (GET, POST, PUT, DELETE, etcétera) para poder realizar diferentes operaciones entre la aplicación que ofrece el servicio web y el cliente.
* GraphQL, arquitectura alternativa a REST.
## Ventajas de los servicios web
* Aportan interoperabilidad entre aplicaciones de software independientemente de sus propiedades o de las plataformas sobre las que se instalen.
* Los servicios Web fomentan los estándares y protocolos basados en texto, que hacen más fácil acceder a su contenido y entender su funcionamiento.
* Permiten que servicios y software de diferentes compañías ubicadas en diferentes lugares geográficos puedan ser combinados fácilmente para proveer servicios integrados.
## Inconvenientes de los servicios web
* Para realizar [transacciones](https://es.wikipedia.org/wiki/Transacci%C3%B3n_(inform%C3%A1tica) "Transacción (informática)"), no pueden compararse en su grado de desarrollo con los estándares abiertos de [computación distribuida](https://es.wikipedia.org/wiki/Computaci%C3%B3n_distribuida "Computación distribuida") como [CORBA](https://es.wikipedia.org/wiki/CORBA "CORBA") (*Common Object Request Broker Architecture*).
* Su rendimiento es bajo si se compara con otros modelos de computación distribuida, tales como *[Java Remote Method Invocation](https://es.wikipedia.org/wiki/Java_Remote_Method_Invocation "Java Remote Method Invocation")* (RMI), [CORBA](https://es.wikipedia.org/wiki/CORBA "CORBA") o *[Distributed Component Object Model](https://es.wikipedia.org/wiki/Distributed_Component_Object_Model "Distributed Component Object Model")* (DCOM). Es uno de los inconvenientes derivados de adoptar un formato basado en texto. Y es que entre los objetivos de XML no se encuentra la concisión ni la eficacia de procesamiento.
* Al apoyarse en HTTP, pueden esquivar medidas de seguridad basadas en *[firewall](https://es.wikipedia.org/wiki/Firewall "Firewall")* cuyas reglas tratan de bloquear o auditar la comunicación entre programas a ambos lados de la barrera.
## Razones para crear servicios Web
La principal razón para usar servicios Web es que se pueden utilizar con HTTP sobre *[Transmission Control Protocol](https://es.wikipedia.org/wiki/Transmission_Control_Protocol "Transmission Control Protocol")* (TCP) en el [puerto de red](https://es.wikipedia.org/wiki/Puerto_de_red "Puerto de red") 80. Dado que las organizaciones protegen sus redes mediante *[firewalls](https://es.wikipedia.org/wiki/Firewall "Firewall")* (que filtran y bloquean gran parte del tráfico de Internet), cierran casi todos los puertos TCP salvo el 80, que es, precisamente, el que usan los [navegadores web](https://es.wikipedia.org/wiki/Navegador_web "Navegador web"). Los servicios Web utilizan este puerto, por la simple razón de que no resultan bloqueados. Es importante señalar que los servicios web se pueden utilizar sobre cualquier protocolo, sin embargo, TCP es el más común.
Otra razón es que, antes de que existiera [SOAP](https://es.wikipedia.org/wiki/SOAP "SOAP"), no había buenas interfaces para acceder a las funcionalidades de otras computadoras en red. Las que había eran *[ad hoc](https://es.wikipedia.org/wiki/Ad_hoc "Ad hoc")* y poco conocidas, tales como *[Electronic Data Interchange](https://es.wikipedia.org/wiki/Electronic_Data_Interchange "Electronic Data Interchange")* (EDI), *[Remote Procedure Call](https://es.wikipedia.org/wiki/Remote_Procedure_Call "Remote Procedure Call")* (RPC), u otras [API](https://es.wikipedia.org/wiki/Application_Programming_Interface "Application Programming Interface").
Una tercera razón por la que los servicios Web son muy prácticos es que pueden aportar gran independencia entre la aplicación que usa el servicio Web y el propio servicio. De esta forma, los cambios a lo largo del tiempo en uno no deben afectar al otro. Esta flexibilidad será cada vez más importante, dado que la tendencia a construir grandes aplicaciones a partir de componentes distribuidos más pequeños es cada día más utilizada.
Se espera que para los próximos años mejoren la calidad y cantidad de servicios ofrecidos basados en los nuevos estándares.
# Protocolo de comunicaciones
En informática y telecomunicación, un protocolo de comunicaciones es un sistema de reglas que permiten que dos o más entidades (computadoras, teléfonos celulares, etc.) de un sistema de comunicación se comuniquen entre ellas para transmitir información por medio de cualquier tipo de variación de una magnitud física. Se trata de las reglas o el estándar que define la sintaxis, semántica y sincronización de la comunicación, así como también los posibles métodos de recuperación de errores. Los protocolos pueden ser implementados por hardware, por software, o por una combinación de ambos.
# Simple Object Access Protocol
SOAP (originalmente las siglas de *Simple Object Access Protocol*) es un [protocolo](https://es.m.wikipedia.org/wiki/Protocolo_(inform%C3%A1tica) "Protocolo (informática)") [estándar](https://es.m.wikipedia.org/wiki/Norma_(tecnolog%C3%ADa) "Norma (tecnología)") que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos [XML](https://es.m.wikipedia.org/wiki/XML "XML").
# Enlaces de interés
1. Servicio Web, Wikipedia, [https://es.wikipedia.org/wiki/Servicio_web](https://es.wikipedia.org/wiki/Servicio_web)
## Ejemplos
1. [https://code.tutsplus.com/es/tutorials/a-beginners-guide-to-http-and-rest--net-16340](https://code.tutsplus.com/es/tutorials/a-beginners-guide-to-http-and-rest--net-16340)
2. [http://www.jc-mouse.net/proyectos/crea-un-servicio-web-rest-con-php-y-mysql](http://www.jc-mouse.net/proyectos/crea-un-servicio-web-rest-con-php-y-mysql)
3. [https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
4. [https://www.bonaval.com/kb/sistemas-operativos/linux-sistemas-operativos/ejemplos-de-htaccess-que-todo-webmaster-deberia-conocer](https://www.bonaval.com/kb/sistemas-operativos/linux-sistemas-operativos/ejemplos-de-htaccess-que-todo-webmaster-deberia-conocer)
5. [https://www.webempresa.com/blog/codigos-utiles-htaccess-para-wordpress.html](https://www.webempresa.com/blog/codigos-utiles-htaccess-para-wordpress.html)\
[https://developer.okta.com/blog/2019/03/08/simple-rest-api-php](https://developer.okta.com/blog/2019/03/08/simple-rest-api-php)
6. [https://codeofaninja.com/2017/02/create-simple-rest-api-in-php.html](https://codeofaninja.com/2017/02/create-simple-rest-api-in-php.html)