Introducción aos Servizos Web

De Wiki do Ciclo ASIR do IES de Rodeira

O Protocolo HTTP

Cando utilizamos un navegador Web, o proceso de traballo é o seguinte:

1. Escribimos unha URL dunha páxina, por exemplo: http://servidor.dominio.com/lista.html
2. O navegador envía unha solicitude á máquina servidor.dominio.com, indicándolle que queremos recibir o documento lista.html.
3. O software de servicio web (servidor Web) executándose en servidor.dominio.com recibe a petición, carga o documento e o envía á máquina que o solicitou.
4. O navegador Web que solicitou o documento, o recibe e o pinta na pantalla según lle indica a linguaxe de marcas XHTML presente no documento.

Como podemos observar, neste tipo de comunicación existen dúas partes diferenciadas: Unha que solicita un servicio (unha páxina), e outra que ofrece ese servicio (a páxina). O software que solicita servicios denomínase ''cliente, mentras que o que os ofrece chámase servidor. A comunicación entre sistemas que empregan este esquema chámase cliente/servidor, e é maioritaria en Internet. Os servicios web, ftp, ou o correo electrónico empregan este esquema.

En outros tipos de comunicación o software que se comunica incorpora a mesma funcionalidade, sin existir dúas partes diferenciadas en canto a ofrecer ou solicitar servicios. Neses casos falamos de comunicación P2P, peer to peer, ou comunicación entre pares.

No caso concreto das páxinas Web, os clientes denomínanse navegadores Web (firefox, IE, chrome, Opera...), e os servidores servidores Web (Apache, IIS, light-httpd, comanche...) e para comunicarse (realizar as peticións e enviar as respostas) empregan un protocolo denominado HTTP (Hypertext Transfer Protocol).

Boxinfo info.png
Por ser http un protocolo de uso común e estar aberto habitualmente ao acceso externo, existen múltiples servicios que empregan este protocolo para ofrecer servicios en Internet, son os chamados Servizos Web

Tecnoloxías de Programación Web

A simple transferencia de hipertexto (texto que fai referencia ou enlaza outro texto) non proporciona a funcionalidade que hoxe en día se precisa nas páxinas web. É necesario que o usuario poda interactuar coa páxina que está visualizando para facer tarefas concretas. Para cumplir este obxectivo é necesaria unha linguaxe de programación que permita procesar as accións do usuario e a información suministrada para conseguir o resultado desexado.

A este nivel podemos distinguir entre dúas tipoloxías diferenciadas en canto ao lugar de execución: As Tecnoloxías de Programación no Servidor, e as Tecnoloxías de programación no cliente.

Tecnoloxías de programación no servidor

Unha das primeiras solucións atopadas a este problema foi dotar aos servidores Web da capacidade de invocar a execución de programas externos sobre a petición dun cliente. Deste xeito, o cliente introduciría información nun formulario HTML que indicaría ao servidor a aplicación encargada de procesala. O servidor web se encargaría de lanzar a execución dese programa enviándolle como argumentos a información recibida a través dun protocolo denominado CGI (Common Gateway Interface)'. A saída producida pola execución da aplicación se redirixe de volta hacia o cliente (as aplicacións a ser executadas como CGI normalmente visualizan HTML). Con este sistema é posible crear programas utilizando calqueira linguaxe de programación capaz de encargarse do procesamento da información suministrada aos servidores web.

Mais adiante, desenvolvéronse linguaxes interpretados (scripting) co obxectivo de realizar esta mesma función. Os servidores web incorporan como funcionalidade (normalmente cun módulo) a posibilidade de interpretar código incluído nas propias páxinas e producir unha páxina web resultado que se envía ao navegador. Existen diversas linguaxes dispoñibles para o seu uso en scripts web, sendo o máis popular PHP. Unha tecnoloxía simple de este tipo incorporada na maioría dos servidores Web son os Server Side Includes (SSI) , que permiten un certo grao de lóxica de programación e a invocación a aplicacións e comandos externos.

Estas solucións son apropiadas para a realización de pequenas aplicacións, xa que permiten un rápido desplegue, pero a medida que a complexidade da aplicación aumenta, resulta máis difícil o seu mantemento. En particular, resulta complexo vincular a execución da aplicación a todos os clientes que a están a utilizar nun instante determiñado, xa que en realidade únicamente se están a executar scripts independentes en cada petición.

Coa idea de simplificar o mantemento das aplicacións e aumentar a súa velocidade de execución xurdiron os servidores de aplicacións. Os servidores de aplicacións ofrecen un entorno onde os clientes poden acceder a unha “aplicación” (entorno de aplicación). En cada petición non se executan scripts independentes, se non que son atendidas por unha aplicación que está funcionando permantentemente no sistema, deste xeito e moi fácil que a acción dun cliente sexa inmediatamente percibida polos demáis. A diferencia das linguaxes de script ou dos CGI, os servidores de aplicacións non precisan dun servidor web, se non que eles mesmos ademáis de encargarse da execución da aplicación poden servir páxinas HTML estáticas. Os máis populares hoxe en día son Tomcat, basado en JAVA e IIS basado en .NET.

Como resumo, as vantaxes e inconvenientes destas tecnoloxías son as seguintes:

CGI
Vantaxes:
  • Pódense realizar en calqueira linguaxe de programación, compilada ou interpretada.
  • As linguaxes compiladas execútanse a gran velocidade, sendo axeitados para a execución de procesos que requiren grande capacidade de cómputo.
  • Os CGI teñen acceso ao sistema como unha aplicación máis, cos privilexios otorgados polo servidor web.
Inconvenientes:
  • E necesario crear un proceso por cada nova petición (e poden ser moitas por segundo), e a creación de procesos é lenta, o que fai que esta tecnoloxía non sexa axeitada para sistemas que reciben moitas peticións/sg. O uso de fastCGI permite aliviar este problema.
  • O que o CGI teña pleno acceso ao sistema pode dar lugar a erros de seguridade.
Scripting
Vantaxes:
  • A execución dos scripts non precisa de creación de novos procesos, polo que son máis eficaces procesando un gran número de peticións que os CGI.
  • Permiten un desenvolvemento e implantación moi rápido.
  • A execución do script está restrinxida ao servidor web.
  • Facilidade de administración.
Inconvenientes:
  • A execución dos scripts é máis lenta que a dos programas nativos, sendo máis lentos para tarefas de cálculo intensivo.
  • E necesario unha gran disciplina para a realización de aplicacións mantibles, xa que facilitan moito o desenvolvemento rápido e “sobre a marcha” sen un deseño previo.
Servidores de Aplicacións
Vantaxes:
  • As aplicacións son normalmente fácilmente mantibles e ampliables, xa que o sistema obliga a un deseño previo.
  • Proporciónase un entorno de aplicación que facilita a comunicación entre distintos clientes da aplicación.
  • E fácil producir código reutilizable para outros propósitos.
  • Maior velocidade de execución, sobre todo en aplicacións con gran número de peticións ou con cálculo intensivo.
Inconvenientes:
  • Maior traballo de implantación. É necesario un deseño previo da aplicación e a creación da infraestructura para a mesma.
  • Maior complexidade na administración do servidor.
  • Necesidade dun software servidor de aplicacións.

Tecnoloxías de programación no cliente

Coa programación no servidor, solucionáronse a maior parte de necesidades nas aplicacións Web, pero en moitas ocasións aínda que xa se dispuña no cliente da información necesaria, era necesario o envío dunha petición ao servidor e a carga dunha nova páxina para a realización de tarefas simples, como por exemplo o desplegue dun menú, ou a comprobación dunha letra do DNI.

Para solucionar este problema, Netscape incorporou ao seu cliente web (navegador ou browser) a posibilidade de executar scripts incluídos nas propias páxinas mediante unha nova etiqueta <script> dando lugar a linguaxe JavaScript. Esta linguaxe foi adoptada mais tarde por todos os navegadores dando lugar a un estándar, do que JavaScript é un dialecto: ECMAScript.

Hoxe en día JavaScript é unha linguaxe de programación con orientación a obxectos que permite a realización de aplicacións complexas, aínda que a súa misión principal é reaccionar aos distintos eventos producidos polo usuario na páxina web modificando o seu aspecto(DHTML ou HTML Dinámico), ou validar as entradas dos formularios antes do seu envío ao servidor para ser procesados.

Existen ademáis librerías de fucións e obxectos JavaScript que permiten realizar tarefas complexas de uso común dun xeito simple, sendo a máis coñecida e utilizada JQuery.

Boxinfo info.png
O HTML Dinámico ou DHTML consiste no emprego de JavaScript para alterar o HTML da páxina dinámicamente en resposta a distintos eventos, normalmente producidos polo usuario (clicks en botóns, movimentos do rato, etc).

Outras tecnoloxías de programación no cliente consisten na descarga do servidor web dunha aplicación que posteriormente é executada empotrada no navegador mediante o uso dun plugin. Os applets JAVA e Flash son os exemplos máis comúns destas tecnoloxías. Os sistemas Windows permiten tamén a descarga e execución no sistema (en lugar de facelo dentro de un plugin no navegador) de aplicacións dun servidor mediante compoñentes ActiveX. A execución de aplicacións provintes do servidor no sistema do cliente pode supoñer un risco para a integridade do sistema, polo que se recurre á firma criptográfica das aplicacións e a solicitude de autorización de execución por parte do usuario.

Os Servizos Web

En moitas ocasións, en lugar de realizar unha aplicación web cunha finalidade concreta (facturación, venta on-line, xestión de contidos) para ser utilizada polo usuario final, se realizan aplicacións coa misión de realizar pequenas tarefas (servizos) que podan ser utilizados para a construcción de software máis complexo. Neste sentido, esas aplicacións ofrecen un servizo para ser consumido por parte de outras aplicacións.

Deste xeito, é posible a elaboración de grandes aplicacions que implementan gran parte da súa funcionalidade solicitando os servicios que necesita aos servidores axeitados, permitindo deste modo o aforro de custos e a realización de aplicacións que se executan de xeito distribuído.

Exemplos deste tipo de servizos poden ser Google Maps, que proporciona servizos de localización, wikilyrics, que nos proporciona letras de cancións ou imdb, que nos proporciona información de películas.

Estes servicios poden ser utilizados para a implementación de aplicacións complexas (que non teñen por qué ser aplicacións web) para completar a súa funcionalidade. Por exemplo o reproductor de audio Amarok fai uso de servicios web para obter letras de cancións e portadas de discos (amazon ofrece ese servizo) ou o centro multimedia XBMC obten información, posters e críticas de películas.

Boxinfo info.png
O acceso (consumo) dos servicios web realízase mediante diversas técnicas e protocolos, sendo o protocolo máis habitual SOAP (Simple Object Access Protocol). Outras técnicas e protocolos de consumo de servicios web son JSON (Java Script Object Notation), JSONP (JSON with Padding) ou REST (Representational State Transfer).

En xeral o proceso de uso dun servicio Web consiste nunha solicitude do servicio mediante unha petición REST ou SOAP, ao que o servicio contesta co resultado da solicitude. Este resultado pode ser un obxecto da linguaxe empregada devolto mediante SOAP, un obxecto JavaScript en JSON ou simplemente datos en XML (ou HTML).

As técnicas e protocolos normalmente utilizados nos servizos Web son os seguintes:

REST

REST (Representational State Transfer) e a técnica de solicitude de información a servidores que empregan os navegadores Web. Está basado no uso dunha URI para identificar o recurso solicitado e diversos comandos para o envío de información (POST, GET ...). E posible facer o envío pegando a información a propia URI do seguinte xeito: http://www.direccion.com?variable=valor&variable=valor...

Os servicios Web basados en REST consisten, polo tanto, en recursos con 4 aspectos definidos:

  • O URI base para o servicio Web, como http://www.direccion.com
  • O tipo de datos soportado polo servicio web. Habitualmente é XML, pero pode ser claqueira medio de internet que sexa un estándar de hypertext (como image/gif, ou application/pdf).
  • O conxunto de operacións soportadas polo servicio Web utilizando os métodos HTTP ( GET, PUT, POST, ou DELETE).

JSON

JSON (Java Script Object Notation) é unha notación que permite representar obxectos Javascript en forma de cadeas de texto, permitindo o intercambio simple de obxectos entre clientes e servidores. Os servicios Web devolven habitualmente o resultado nesta notación, o que permite o seu uso simple e inmediato directamente no navegador mediante JavaScript. Existen librerías de “traducción” de JSON para linguaxes de script de servidor, como PHP que se encargan de transformar os obxectos JSON en obxectos propios da linguaxe.

AJAX

AJAX (Asincronous JavaScript And XML). E unha técnica que permite que unha páxina Web realice unha petición a un servicio sin necesidade de recargar unha nova páxina como resposta. A resposta do servicio recíbese dentro dunha función JavaScript que se encargará de procesala. Normalmente a resposta será en XML, pero non ten por qué ser así. Moitas veces se recibirán obxectos JSON, HTML, ou códigos de resultado.

AJAX básase no uso do obxecto Javascript XMLHttpRequest, que permite realizar chamadas a servidores retornando o seu resultado, aínda que por motivos de seguridade, unha páxina únicamente pode realizar unha solicitude XMLHttpRequest ao seu servidor orixinal.

JSONP

JSONP (JSON with Padding) e unha técnica que permite “saltarse” a limitación de AJAX indicada con anterioridade. Consiste no aproveitamento da posibilidade ofrecida pola etiqueta HTML &ltscript> de cargar JavaScript de servidores aleatorios. Consiste en realizar a chamada ao servicio Web utilizando o atributo src de <script>. O servicio Web, retornará unha chamada a unha función JavaScript que debe estar programada na páxina pasándolle como argumento o resultado da execución do servicio. Habitualmente é posible indicarlle ao servicio Web o nome da función a chamar.

Deste xeito, a función Javascript poderá procesar a información devolta sen abandoar a páxina actual, de xeito análogo a unha chamada AJAX.

SOAP

SOAP (Simple Object Access Protocol) é un protocolo de intercambio de información e invocación de procesos remotos cliente-servidor, empregado habitualmente para a elaboración de servizos Web. Existen librerías que implementan o protocolo SOAP en múltiples linguaxes, entre elas C ou PHP permitindo a creación e o consumo de servizos Web.

O Protocolo SOAP está basado en XML, e polo tanto consiste no intercambio de documentos XML en texto plano. Mediante unha folla de descrición de servicio (WSDL) en XML e posible automatizar o consumo dos servizos web de xeito que podemos ignorar o protocolo. Esta folla de descripción de servicios proporciona ao cliente a información dos obxectos ofrecidos polo servicio, os seus métodos, a información que precisan e o resultado que suministran.

A librería cliente emprega esta información para a creación automática dos obxectos do cliente que nos sumistrarán os resultados indicados na folla WSDL.