|
En este capítulo veremos la manera en que Delphi puede ser usado como un auxiliar de servidor de Web.
Un servidor de web es un programa que escucha en un puerto (normalmente el puerto estándar de Web, que es el puerto #80) y recibe peticiones anónimas de otras computadoras. Todas las peticiones en un servidor web se limitan a tres comandos básicos: GET, POST y PUT. Todas las respuestas a estas peticiones son en formato HTML (incluso los errores).
La petición GET se utiliza cuando usted pide un documento al servidor. Por ejemplo, cada vez que usted pide una página de web en su navegador de internet, su navegador hace una petición GET al servidor. Una vez que tiene el documento, lo analiza para saber dónde debe buscar las imágenes dentro de ese documento, y utiliza esta información para seguir haciendo peticiones GET, una por cada elemento, hasta que todas las gráficas, textos, hojas de estilo, etcétera, han sido leidas por el navegador.
El protocolo web es tan sencillo que usted puede hacer un experimento muy fácilmente. Utilizando su programa de telnet, conéctese a un servidor web (puerto 80). Por ejemplo, yo estoy en mi máquina y sé que tengo un servidor de web en mi misma máquina. Así que tecleo en la línea de comando:
telnet localhost 80
A continuación no veremos nada más que el cursor. Pero escriba lo siguiente:
GET /
Y el resultado será algo como lo siguiente:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN\"> <HTML> <HEAD> <TITLE>Bienvenido al servidor Equis!</TITLE> </HEAD> </TEXT>
Haga el experimento. Intente esto con cualquier servidor. Diviértase.
Como habrá notado, los protocolos básicos de comunicación son muy sencillos. El propósito de un servidor web simplemente es el de enviar cualquier documento bajo un directorio específico a cualquier persona que lo pida.
Esto es por sí solo muy útil, pero dado el hecho de que el servidor sólo proporciona archivos, pareciera que nos cierra las puertas a programar páginas interactivas. Afortunadamente este no es el caso; todos los servidores de web soportan algo llamado "Common Gateway Interface" (Interfaz Común de Compuertas), o CGI.
CGI es una especificación que los autores de servidores de web deben implementar. Básicamente, un servidor de web puede designar uno o más directorios como "Ejecutables". Una vez creado el directorio y designado como ejecutable (casi todos los servidores vienen con uno ya creado, llamado "cgi-bin"), usted puede poner programas dentro de este directorio que se ejecutarán y cuya salida estándar (stdout) será redireccionada a la salida del servidor de web. De esta manera usted puede componer páginas programaticamente. Además, si la página está siendo emitida como resultado de un comando "post" (que es lo que se genera cuando el usuario presiona el boton designado como "submit" en una de esas formas de web), los resultados de los campos de la forma serán proporcionados al programa cgi por medio de stdin.
En principio esto es muy sencillo, pero el poder que nos proporciona es tremendo. Usted puede revisar los parámetros que vienen de entrada, tomar decisiones, consultar bases de datos enormes, y al final de todo esto emitir los resultados en formato HTML para que el usuario pueda ver las formas y tenga una página interactiva.
Bajo Windows, los GGI muchas veces se programan en ejecutables tipo DLL. Hay tres tipos de DLLs que usted puede usar: ISAPI, NSAPI y WinCGI. Dentro de nuestro curso utilizaremos ISAPI porque es el más común.
Delphi nos permite utilizar toda clase de DLLs para CGI, y además tiene excelentes componentes para producir páginas HTML automáticamente de manera programática. De esta manera usted puede tomar el encabezado y pie de las páginas "estándar" de su sitio de internet y generar via el productor de páginas de Delphi una respuesta de base de datos completa que tiene el mismo formato visual que las demás páginas de su sitio de internet.
En el siguiente capítulo crearemos un repositorio de código via web que los usuarios podrán consultar, utilizando una base de datos existente proporcionada por las ayudas de programación de "GExperts".