¿Validar formularios en el servidor y mostrar el «error» fácilmente?

validar-formularios
angular2

#1

Con el lanzamiento de final de Angular2 estoy viendo la posibilidad de ir adoptando esta tecnología.

Mi idea sería mantener un sistema REST basado en JEE en el servidor, pero tengo la duda sobre formas de integrar la comunicación de los validar formularios de forma cómoda.

Ahora mismo tengo un sistema JEE+JSF+Primefaces dónde la validación es sublime: El mismo «xhtml» se ocupa de la representación y validación.

¿Alguna herramienta definir las restricciones en el lado del servidor y que los errores se «enlacen» directamente a los inputs correspondiente en el lado cliente?


#2

Se que no tengo ni idea, y se que tengo poco que aportar, pero ahí voy. Tengo entendido que los formularios deben de validarse tanto en cliente como servidor por seguridad (aunque tarde más…)


#3

En cuanto a validación, Angular hace énfasis en hacerlo desde el cliente, con herramientas basadas en HTML5, por lo que la idea de hacerlo desde el servidor se me ocurre que puede hacerse así:

  • Controller que, mediante REST envia los datos a un servidor
  • Servidor los valide, y envía una respuesta
  • Controller recibe respuesta e interpreta
  • Controller lanza mensajes donde se requiera (con ngMessages, por ejemplo)

Aunque no estoy seguro de si es lo que buscas


#4

@SrFreak eso es lo que supuse. Mi duda está más bien enfocada a si hay
algún «formato» de respuesta para que el controller lo procese directamente
y muestre los errores dónde proceda, del estilo

{ "formulario":  { "nombre": { "error": "hay que poner un nombre" },
"edad":  { "error": "" } }

#5

A ver ese error en concreto con el atributo require, es suficiente con HTML.
La validación entiendo que viene por si el formato de email es correcto, si no trata de hacer injection y cosas así no?


#6

No nos estamos entiendo.

A ver, la validación del lado del cliente no vale como medida de seguridad, solo para informar al usuario y evitar peticiones incorrectas «de buen fe»… Cualquiera puede saltarse esa seguridad y enviar lo que quiera, así que siempre hay que validar también el lado servidor.

Yo he puesto un ejemplo de un required, pero igualmente podría ser un «el usuario ya está ocupado» o «estás intentando algo para lo que no tienes permiso, hijo de perrilla».


#7

Hasta donde se, que tampoco es demasiado, estándar no hay nada por el estilo. Sin embargo, siempre puedes montarte tu propia función que interprete una respuesta JSON según ese mismo esquema.


#8

My 2 cents: Si replicas la misma validación que tienes en el servidor en el lado del cliente (con angular) y evitas que el usuario envíe datos erróneos no deberías preocuparte por enviar de vuelta mensajes de error. Puedes implementar esos mismos mensajes directamente en JS. Lo importante ahora… hay gente que puede enviarte los datos al servidor de todas maneras saltándose tu cliente web pero ya es utilizando otros medios (a little bit shady diría), así que en ese caso no se hasta que punto te merece la pena enviar mensajes de error de vuelta cuando puedes bloquear la petición y ya.

Yo diria que debe haber algo ya para implementar CSRF en angular y en JEE para ayudarte a separar las peticiones buenas de las un poco más malintencionadas. Eso y un poco de magia JS en angular que hay muchas librerías ya de validación muy completas. (Joi)

Si todo esto no te convence lo mejor es prepararte un pequeño modulo o directiva que conecte los mensajes de error con tu formulario y que cuando el controlador reciba una respuesta sea capaz de renderizar el mensaje. Lleva más trabajo pero creo que es la solución que tenías en mente desde el principio.