Actualmente estoy leyendo y trabajando los ejemplos en Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph.Evitar que el método en Grails Controller se exponga como acción
Este libro fue escrito usando Grails 1.2.
Tienen un ejemplo de código donde crean un método debug()
que se llama por beforeInterceptor
y explica que, dado que debug()
es un método, no se expone al usuario a través de la URL. Explican que los cierres se exponen como acciones de controlador para el usuario final, pero los métodos no lo son.
También vi en el Grails 1.3 documentation, que aluden a un método regular:
def auth() { ... }
siendo tratados como privada, ya que es un método, no un cierre. Lo cual era cierto a partir de Grails 1.3. Sin embargo, desde Grails 2.0.0, Controller Actions can be implemented as both methods and closures.
Esto me llevó a preguntarme (y tratar de averiguar) una forma de replicar la funcionalidad que está disponible en pre-Grails 2.0.0 de crear un método en un controlador que no se exponga al usuario final.
Pensé en 2 posibles enfoques y me preguntaba ¿cuál sería el mejor estilo/práctica y por qué?
- Configuración de acceso como privada, es decir
private def auth()
Configuración allowedMethods para el método de cadena vacía:
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
ambos enfoques parecían lograr el efecto deseado. Sin embargo, el primer enfoque da un código de error HTTP 404, y el segundo enfoque proporciona un código de error HTTP 405.
¿Alguien sabe qué enfoque sería preferible? Además, ¿hay algún otro enfoque o una "técnica de mejores prácticas" para hacerlo?
+1, los métodos que no deberían exponerse simplemente no deberían estar "expuestos", no "no permitir". – shihpeng