Mapas de URL avanzados para REST

This is the translation of the original article.


Hasta ahora, estamos familiarizados con cómo implementar una API básica de REST en Caché y aquí hay una buena documentación al respecto: REST en Caché.

Sin embargo, una pregunta que surge de vez en cuando es: ¿Cómo puedo hacer que un parámetro en mi URL REST sea opcional? 

En pocas palabras, ¿es posible crear un mapa de URL en Caché que asigne una URL como esta?:

http://server/API/object///old

Si bien esto puede parecer extraño, en realidad es una URL válida. Puedes leer los detalles en RFC3986 sección 3.3.

El framework proporcionada por %CSP.Rest en realidad nos permite crear mapas que coinciden con la URL anterior. En la documentación mencionada anteriormente, esto solo se menciona en una nota al margen que explica que el mapa de URL se está traduciendo a una expresión regular.

Para aprovechar este poder, necesitamos entender las expresiones regulares. Hay un buen documento de Michael que explora los conceptos básicos de las expresiones regulares dentro del contexto de Caché aquí. Si no está familiarizado con las expresiones regulares, le recomiendo que se tome un momento para leerlo.

En %CSP.Rest, el bloque UrlMap realmente compila los mapas en expresiones regulares. Por ejemplo, un mapa de URL como Url="/class/:namespace/:classname" (tomado del ejemplo de Docserver) se está compilando en:

/class/([^/]+)/([^/]+) 

Al recordar el artículo de Michael, verá que este RegEx coincide con una URL que comienza con /class/ y luego arrojando las siguientes dos piezas de la URL separadas por / en dos grupos coincidentes. Esos serán luego pasados al método GetClass como parámetros.

Podemos pasar expresiones regulares al parámetro Url de UrlMap en nuestra clase directamente. De esta manera eludimos las limitaciones de la simplificación. Y nos permite crear mapas avanzados de URL: 

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]

{ 

<Routes>

<Route Url="//API/object/([^/]*)/([^/]*)/old" Method="GET" Call="GetClass"/> 

</Routes> 

}

En este caso, simplemente reemplazamos el modificador 1 o más + con  0 o más *. En combinación con la introducción a expresión regular, nos hacemos una idea del poder que tenemos entre manos. Sin embargo, recuerde por favor: 

un gran poder conlleva una gran responsabilidad 
---(¡y no soy el tío Ben!) 

Las expresiones regulares son una herramienta muy poderosa, y como tal, suelen tentar a implementar cosas que realmente podrían haber sido mejor con otras soluciones.

¡Téngalo en cuenta cuando cree su próxima expresión regular increíble!

Happy coding!