Guía de Implantación de la Interfaz Web.SQL |
Para efectos de realizar las pruebas con esta interfaz en el presente Trabajo de Graduación, se empleó un sólo equipo con el sistema operativo Windows NT 4.0 (Server) y el servidor Web Internet Information Server 2.0 de Microsoft. Se instaló y se configuró adecuadamente en dicho equipo un servidor SQL de Sybase versión 11.0.1.
Adicionalmente, se hicieron las pruebas respectivas con el mismo servidor Windows NT 4.0 y un servidor SQL de Sybase versión 10.x, instalado y configurado en otro equipo bajo la plataforma Novell versión 3.11, a través de una red informática.
A continuación se desarrolla una guía práctica para implantar la interfaz Sybase web.sql en la plataforma Windows NT. Remítase a la documentación que se provee con el software de distribución respectivo, para implantar dicha interfaz en las otras plataformas tales como: Sun Solaris, IRIX y HP-UX, la cual se puede adquirir en el siguiente sitio Web:
El software de web.sql para Windows NT está disponible en el Web. Para adquirirlo, abra la siguiente URL:
http://www.sybase.com/prouducts/internet/websql/ws_reqs.html
Después de haber bajado el software del WWW, realice los siguientes pasos:
Ejecución del Programa de Instalación (Setup)
Para ejecutar el programa de instalación (Setup) de Sybase web.sql con los archivos de distribución adquiridos del Web, realice los siguientes pasos:
Configuración del Archivo Sql.ini
El archivo sql.ini, ubicado en el directorio \sybase\ini del servidor SQL de Sybase, describe las conexiones de red entre dicho servidor y los clientes con los cuales se comunica. Casi todos los productos Sybase emplean este archivo para encontrar información concerniente a los servidores disponibles con sus respectivas direcciones en la red.
Después de haber completado el programa de instalación de web.sql, se requiere configurar la conexión al servidor SQL, proporcionando un archivo sql.ini válido en el directorio <dir_websql>\sybase\ini del servidor Web, donde se instaló el software de web.sql.
El archivo sql.ini puede adquirirse de cualquiera de las siguientes formas:
Creación de un archivo sql.ini
c:\<dir-websql>\sybase\bin; c:\<dir-websql>\sybase\dll
<dir-websql> es el directorio donde quedó instalado Sybase web.sql.
NLWNSCK | : | WinSock TCP/IP |
NLNWLINK | : | NT NWLINK SPX/IPX |
NLMSNMP | : | Named Pipes |
NLDECNET | : | DecNet |
Cuando haya terminado, guarde los cambios realizados y sálgase del sqledit.exe.
Después de haber instalado web.sql y especificado un archivo sql.ini válido, puede probar la instalación y definir las conexiones y asociaciones que requiera web.sql.
Para probar la instalación de web.sql, prosiga de la siguiente manera:
http://<servidor-www>/<dir-cgi>/<prog-websql>/<dir-websql>/welcome.hts
Donde:
< servidor-www > | es el nombre o la dirección IP del servidor Web. |
<dir-cgi> | es el nombre del directorio de escritos CGI del servidor Web. |
<prog-websql> | es el nombre del programa CGI de web.sql (ws.exe ó websql) |
<dir-websql> | es la ruta del subdirectorio de web.sql en el directorio raíz de los documentos HTML del servidor Web. |
welcome.hts | es el nombre de la página de bienvenida de Sybase web.sql. |
Después de haber instalado Sybase web.sql se necesita definir las conexiones y asociaciones de la base de datos que web.sql deberá utilizar. Cuando se realiza esto, es importante considerar la seguridad de web.sql.
Mientras configura la instalación de web.sql, debe seguir los requerimientos de su servidor para establecer seguridad a sus archivos y documentos. Esto lo puede realizar de dos formas:
a. Utilizando la seguridad estándar del servidor HTTP.
Siga las medidas de seguridad estándar para un servidor HTTP asignando los permisos en archivos y directorios para que los usuarios sin autorización no puedan hacer modificaciones o no tengan acceso a lo siguiente:
b. Limitando acceso al programa CGI de web.sql.
La única forma de poder implantar un control de acceso con la versión CGI de web.sql, es restringiendo el acceso al mismo programa CGI (ws.exe). De esta manera, se restringe el acceso a todos los archivos HTS contenidos en el servidor Web con un sólo usuario y contraseña.
Para ello, debe mover el programa CGI de web.sql a un directorio propio. De otra forma, la restricción de acceso se aplicaría a todos los escritos CGI que se encuentran en el mismo directorio del programa web.sql.
Si realiza lo anterior, debe configurar su servidor HTTP para que reconozca el nuevo directorio de web.sql como un directorio de escritos, con el atributo de ejecución y no de lectura.
Una vez que ha asegurado el programa CGI de web.sql en su propio directorio, puede especificar el control de acceso para él.
Conexiones y Asociaciones a la Base de Datos
Para utilizar la interfaz Sybase web.sql se deben definir las conexiones y asociaciones a la base de datos, requeridas por dicha interfaz para responder a las requisiciones del usuario. Se pueden emplear uno de los siguientes métodos:
<syb>
$ws_db = ct_connect("miLogin","miContraseña","miServidor");
</syb>
Cuando se define una conexión a la base de datos, debe proveerse el nombre de la conexión, el nombre del servidor de bases de datos, el login o nombre de usuario y su respectiva contraseña, de tal modo que únicamente ese usuario puede acceder al archivo HTS asociado al nombre de la conexión. Toda esta información es almacenada en el archivo del mapa de la base de datos (.websql.pl).
Página de Administración de Web.sql
Para utilizar la página de Administración de web.sql siga los siguientes pasos:
Después de haber configurado satisfactoriamente web.sql, puede comenzar a utilizar la herramienta para desarrollar sus propios archivos HTS como se explicará en la siguiente sección.
Como se explicó en la sección Formato de Archivos Hyper Text Sybase del Capítulo X de este documento, es posible incluir sentencias de transacción SQL en un archivo HTS entre un bloque de viñetas <SYB> y </SYB>. Al incluir el atributo TYPE=SQL en la primer viñeta se identifica que el bloque es de sentencias SQL.
En el siguiente ejemplo, se asume que la conexión a la base de datos Tesis ha sido definida previamente y se muestra cómo incluir una simple sentencia select en un archivo HTS:
select * from autores
</SYB>
En el ejemplo anterior, cuando un browser cliente hace la requisición del archivo que contiene el código, el programa web.sql envía la consulta al servidor SQL. Éste evalúa la sentencia select y reemplaza el bloque <SYB> con los resultados de la instrucción select (en formato HTML) en el flujo HTML que pasa al servidor HTTP. El cliente browser nunca ve la sentencia SQL que produce los resultados obtenidos.
Puede incluir múltiples sentencias SQL en un sólo bloque <SYB>. También puede incluir múltiples bloques <SYB> en un sólo archivo HTS. Inclusive, puede entremezclar bloques <SYB> de Perl con bloques <SYB> de SQL. Sin embargo, no puede incluir sentencias SQL y código Perl dentro de un mismo bloque <SYB> (excepto cuando se emplean variables Perl en bloques SQL, como se discutirá más adelante en este capítulo).
Consulta a una base de datos utilizando SQL.
Desde un archivo HTS puede utilizar sentencias de transacción SQL para realizar consultas a bases de datos. Web.sql convierte los resultados a una tabla con formato HTML 3.0.
En el siguiente ejemplo se hace una consulta a la tabla autores de la base de datos Tesis, a través de la sentencia select. Los resultados se obtienen en una tabla HTML
select apellido, edad
from Tesis..autores
where edad > 25
</SYB>
Los resultados se obtienen en una tabla con formato HTML, como se muestra a continuación:
Castro 26
García 28
Méndez 30
Otras acciones con una base de datos utilizando SQL
Además de consultar a una base de datos a través de la instrucción select, se pueden ejecutar otras instrucciones SQL en un archivo HTS. Siempre y cuando el usuario de dicho archivo tenga los permisos apropiados, podrá insertar, eliminar y/o modificar registros y crear tablas en la base de datos, así como también, ejecutar procedimientos predefinidos.
Nota:
Si el comando SQL que se especifica en un bloque <SYB> no produce resultados de registros, entonces el bloque <SYB> tampoco producirá resultados en el flujo HTML que web.sql pasa al servidor HTTP. Particularmente, web.sql no imprime el estado de los comandos insert, update o delete, que se utilizan para insertar, actualizar y eliminar registros, respectivamente.
En el siguiente ejemplo, el bloque <SYB>inserta un registro a la tabla autores de la base de datos Tesis.
insert into Tesis..autores
values ("María", "Guzmán", "24", "San Salvador")
</SYB>
Por otra parte, cuando se emplea el comando use para seleccionar una base de datos en particular, deberá colocar dicho comando en un bloque <SYB TYPE=SQL> por separado, precediendo a las demás sentencias SQL para las cuales hará efecto. La base de datos que especifique en la sentencia use estará activa hasta el final del archivo o hasta la siguiente sentencia use que se especifique. Por ejemplo:
<H1>Autores de Tesis:</H1>
<SYB TYPE=SQL>
use Tesis
</SYB>
<SYB TYPE=SQL>
select * from autores
</SYB>
Uso de variables Perl y campos de datos de formularios HTML en los archivos HTS.
Web.sql define y fija automáticamente algunas variables relacionadas con los valores de campos de datos contenidos en formularios HTML, los cuales son remitidos al archivo HTS.
Es decir, web.sql pasa automáticamente los datos de un formulario HTML al archivo HTS y asigna los valores a variables Perl (web.sql soporta ambos métodos GET y POST). Por lo cual, se pueden emplear estas variables en las sentencias SQL, logrando así la creación de formularios para la interacción con bases de datos.
Como ejemplo, considérese un formulario simple en HTML que posibilite al usuario buscar autores por apellido de la base de datos Tesis. El siguiente formulario HTML provee de un campo de texto para que el usuario pueda ingresar un apellido.
<BODY>
<H2>Búsqueda de Autores por apellido</H2>
<P>
<FORM ACTION="/cgi-bin/ws.exe/busqueda.hts" METHOD=POST>
Ingrese el apellido a buscar: <INPUT NAME=apellido SIZE=30>
<P>
<INPUT TYPE=SUBMIT VALUE=Buscar>
</FORM>
</BODY>
</HTML>
El atributo ACTION de la viñeta <FORM> produce que el browser envíe los resultados del formulario al servidor para el URL de busqueda.hts, cuando el usuario haga clic en el botón Buscar. El siguiente archivo HTS busqueda.hts, obtiene el valor del campo apellido del formulario y lo utiliza en la sentencia select para poder ejecutar la consulta a la base de datos.
<BODY>
<H1>Autores</H1>
Autores con el apellido $apellido:<P>
<SYB TYPE=SQL>
select Apellido, Nombre, Edad, LugarNac
from Tesis..autores
where Apellido = upper("$apellido")
order by Apellido
</SYB>
</BODY>
</HTML>
Como se reportó anteriormente en el Capítulo X de este documento, es factible incluir el código de un escrito Perl en un archivo HTS entre las viñetas <SYB> y </SYB>. Se puede especificar que un bloque <SYB> contiene código Perl al incluir en la primer viñeta el atributo TYPE=PERL. Sin embargo, cuando se omite dicho atributo, el programa web.sql asume que el bloque contiene código Perl.
El siguiente ejemplo muestra cómo incluir un código simple de Perl en un archivo HTS.
require "ctime.pl";
print "Fecha: ", "<B>", &ctime(time), "</B>\n";
</SYB>
Cuando un browser cliente hace la requisición del archivo que contiene este código, el programa web.sql evalúa dicho código y reemplaza el bloque <SYB> con los resultados impresos en el flujo HTML que pasa al servidor HTTP. El cliente browser nunca ve el código Perl que produce los resultados obtenidos.
Nota:
En un escrito Perl debe imprimir cualquier cosa que desee incluir en el flujo final de HTML que web.sql envía al cliente browser. También puede incluir viñetas HTML en las salidas del código Perl, lo cual permite dar un formato a los resultados.
Puede incluir múltiples bloques <SYB> en un sólo archivo HTS. También puede entremezclar bloques <SYB> de SQL con bloques <SYB> de Perl. Sin embargo, no puede incluir sentencias SQL y código Perl dentro de un mismo bloque <SYB>.
Uso de variables Perl en los archivos HTS.
Web.sql posibilita definir variables dentro de bloques <SYB> de Perl y luego utilizar sus valores en cualquier parte del archivo. El siguiente ejemplo utiliza el valor de una variable Perl en la porción HTML de un archivo HTS. Nótese que la variable se define dentro de un bloque <SYB> de Perl, pero directamente se hace referencia a ella en el código HTML.
<BODY>
<SYB TYPE=PERL>
# Se asigna la fecha y hora del sistema en una variable.
require "ctime.pl";
$tiempo = &ctime(time);
</SYB>
<STRONG>Hoy es: ${tiempo}</STRONG>
<P>
</BODY>
</HTML>
Interfaces de Programación de Aplicaciones (API)
Web.sql provee de dos Interfaces de Programación de Aplicaciones (API) en Perl para la interacción con bases de datos, las cuales son: "Convenience" API ("conveniente") y Client-Library API (bibliotecas para cliente). Si no ha trabajado antes con Sybase Open Client, probablemente quiera utilizar mejor la interfaz "Convenience" API, puesto que requiere de menos programación.
Se puede utilizar la interfaz "Convenience" API para generar automáticamente las tablas HTML que contienen los resultados de la consulta al servidor SQL. Todas sus funciones contienen el prefijo "ws_". En cambio, la interfaz Client-Library API se puede utilizar para manejar los datos devueltos por el servidor SQL, registro por registro. Todas sus funciones contienen el prefijo "ct_".
Uso de la Interfaz Convenience API
La interfaz Convenience API de web.sql provee de un conjunto de rutinas sencillas para ejecutar la tareas más comunes en un archivo HTS. Puede emplear estas rutinas individualmente para realizar la mayor parte de la interacción con bases de datos, o puede combinarlas con las rutinas de la interfaz Client-Library API de web.sql.
A continuación, se listan las rutinas de la interfaz Convenience API de web.sql que se pueden utilizar en un bloque <SYB> de Perl.
ws_connect : | Conecta a un servidor SQL y devuelve un identificador de la conexión. |
ws_content_type : | Fija el tipo de contenido para los datos devueltos por un archivo con extensión .pl. |
ws_error : | Imprime un mensaje de error y una cadena opcional. Termina el procesamiento de la página actual. |
ws_fetch_rows : | Obtiene e imprime los registros devueltos por la función ct_sql. |
ws_print : | Imprime una cadena, extendiendo las referencias a variables Perl. |
ws_sql : | Ejecuta uno o más comandos SQL e imprime los resultados.. |
ws_rpc : | Ejecuta un procedimiento almacenado y registrado, actualiza los argumentos e imprime los resultados. |
Para una información más detallada del uso de cada una de estas funciones, remítase a la Guía del Programador incluida en la documentación de la aplicación Sybase web.sql.
Uso de la Interfaz Client-Library API
La interfaz Client-Library de web.sql posibilita el manejo de los datos de los registros devueltos por el servidor. Provee de una interfaz similar a la de Sybase Open Client Client-Library (CT Lib) API.
Esta interfaz es más compleja que la Convenience API, pero da un mayor control sobre la interacción con el servidor SQL. Difiere de la interfaz Open Client API en muchos aspectos, haciendo de la programación de web.sql más fácil.
Nota:
No se requiere ser un programador experimentado de Open Client Client-Library para poder utilizar la interfaz Client-Library API de web.sql. La Guía del Programador de web.sql contiene toda la información necesaria para poder utilizar dicha interfaz. Sin embargo, si es un programador experimentado de Open Client Client-Library, debería revisar las páginas de referencia en el Apéndice A de la mencionada guía. Preste atención a las diferencias entre los APIs.
Es posible utilizar las rutinas de la interfaz Client-Library de web.sql en combinación con la interfaz Convenience API. Por ejemplo, puede emplear la función ct_connect para conectarse a la base de datos, ws_error para manejar condiciones de errores y una combinación de rutinas Client-Library y la función ct_fetch para obtener los datos del registro resultante.
A continuación se listan las rutinas de la interfaz Client-Library API de web.sql que se pueden incluir en un bloque <SYB> de Perl.
ct_callback : | Instala e invoca una rutina para el manejo de errores. |
ct_cancel : | Cancela un comando o los resultados de un comando. |
ct_col_types : | Recupera un arreglo de tipos de columnas para los resultados de la consulta actual. |
ct_col_names : | Recupera un arreglo de nombres de columnas para los resultados de la consulta actual. |
ct_connect : | Establece una conexión de base de datos a un servidor. |
ct_fetch : | Obtiene un sólo registro de los datos resultantes. |
ct_fetch_parameters: | Actualiza las variables de parámetro de salida provistas a ct_rpc. |
ct_options : | Fija, recupera o limpia los valores de las opciones del procesamiento de consultas del servidor. |
ct_res_info : | Recupera información acerca del conjunto de resultados o comando actuales. |
ct_results : | Determina el estado del comando SQL y el tipo de resultados devueltos. |
ct_rpc : | Llama a un procedimiento almacenado que reside en un servidor remoto. |
ct_sql : | Envía uno o más comandos SQL al servidor de bases de datos. |
Para una información más detallada del uso de cada una de estas funciones, remítase a la Guía del Programador incluida en la documentación de la aplicación Sybase web.sql.