Evidentemente, la tecnología escogida no es una nuestra elección; viene dada por los requisitos, y, a pesar de todas las justificaciones esgrimidas no ha sido posible cambiarlo.
Servidor web
Nuestro servidor web es un W 2003 con las características IIS activadas.
En la carpeta INETPUB, hemos creado como primer paso una carpeta para javascript donde hemos puesto las librerías JSON y JQUERY (en versión 1).
Recoger parámetros en Javascript desde la URL
La url que se invoca es algo como:
http://www.anyserver.com/mypage.asp?Details=products
En nuestra página ASP, vamos a usar las funciones de purl para sacar valores de la línea de parámetros
Verificar parámetros con expresiones regulares.
...
<script src="js/purl.js" language="javascript" type="text/javascript"></script>
...
<script type="text/javascript">
ip=$.url().param("ip") </script>
Coger parámetros en Classic ASP 1.0 desde url o cabecera
Esta es la forma de recogerlo de URL
IP = Request.QueryString("IP")
Si hay una cabecera propia, hay que anteponer http_ para poder extraerla, cómo explican en el foro de microsoft:
If a client request includes a header other than those specified in the IIS Server Variables table, you can retrieve the value of that header by preceding the header name with “HTTP_” in the call to Request.ServerVariables. For example, if the client sends a header such as SomeNewHeader:SomeNewValue, you can retrieve SomeNewValue by using the following synta
<% Request.ServerVariables("HTTP_SomeNewHeader") %>
Nosotros nos hemos hecho una función, para aceptar parámetros por url y por cabecera indistintamente:
Function GetParam (strTarget)
Dim param
param = Request.ServerVariables("HTTP_"&strTarget)
if (Len(param) = 0) then
param = Request.QueryString (strTarget)
End if
GetParam=param 'Return value
End Function
Respuesta del servidor
Todas las respuestas se hacen en forma de texto:
response.write Linea 1 & vbcrlf
response.write Linea 2 & vbcrlf
Gestión de logs desde Classic ASP 1.0
Hemos usado el código de Digital Colony, por que es inmejorable.
En la carpeta donde se guardan los logs, se debe dar permisos al usuario ASPNET de lectura y escritura.
Conexión a base de datos desde Classic ASP 1.0
Vamos a usar esta solución para prevenir inyección de sql en la base de datos.
Además, hemos creado un usuario con privilegios sólo de escritura sobre la base de datos, para prevenir cambios o consultas sobre otras base de datos.
strConnect = "DRIVER={SQL Server};SERVER=server\instance;DATABASE=my_Db;UID=my_uid;PWD=my_pwd;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.ConnectionString = strConnect
conn.Open
(...)
conn.Close
Transacciones en base de datos desde ASP 1.0
Algunas de nuestras conexiones, las vamos a hacer dentro de una transacción:
conn.BeginTrans
(...)
conn.CommitTrans
Función ExecuteScalar contra la base de datos desde Classic ASP 1.0
Hemos creado una función para recoger el primer resultado de una sentencia select.
Function executeScalar (strCommand)
Set command = CreateObject("ADODB.Command")
command.ActiveConnection = conn
command.CommandText = strCommand
Set rs = command.Execute ()
if not rs.EOF then
rs.movefirst
executeScalar = rs.fields(0)
else
executeScalar = 0
End IF
Set rs = nothing
Set command = nothing
End Function
Gestión de errores de ASP
Para nuestro servicio Rest, hemos escogido la gestión más simple de las que proponen desde codeguru:
En la cabecera de la página ASP:
<%
' Error Handler
' Turn on page buffering:
Response.Buffer = True
' Turn On Error Handling:
' On Error Resume Next so that errors don't stop page execution
On Error Resume Next
%>
(…) Código ASP de la página
Al final, se captura el error, se limpia la respuesta y se responde con el texto que se espere.
<%
' Error Handler
If Err.Number <> 0 Then
'Clear response buffer
Response.Clear
End If
%>
Más información
Vamos a comenzar por repasar los siguientes foros de información:
- http://programmers.stackexchange.com/questions/88556/how-to-make-classic-asp-interesting-if-you-are-stuck-with-it
- Can I build a REST application using ASP Classic?
- ASP Classic example of REST / JSON call: https://gist.github.com/joseph-montanez/1948929
- Never heard of json before
- Ajax with classic ASP using jquery