¿Cómo manejar la validación de recursos en los servicios web REST?

Estoy creando un servicio web REST en Java utilizando Spring, Jersey e Hibernate (JPA).

Ahora estoy tratando de agregar soporte para la validación en mis recursos. JSR-303 (validación de Bean) apareció naturalmente como una opción adecuada (estoy usando Hibernate Validator, que es la implementación de referencia de JSR-303). Sin embargo, estoy tratando de consolidar algunos conceptos primero.

Me parece que hay al menos dos tipos de validaciones posibles:

Validación regular en los campos., p.ej. compruebe que una propiedad no es nula, verifique siString propiedad es un correo electrónico válido, verifique si unInteger la propiedad es mayor que10, etc. Esto está funcionando como se esperaba. He registrado un JAX-RS ExceptionMapper que mapeajavax.validation.ConstraintViolationExceptionen las respuestas HTTP adecuadas.Validación de integridad de datos

Explicaré exactamente lo que quiero decir con "Validación de integridad de datos" con un ejemplo. Esto sucede cuando hay relaciones entre dos o más recursos. Imagina dos recursos: unProduct y unCategory. UNAProduct tiene a Category. Cuando el cliente envía al servidor la representación de laProduct para crear (una solicitud POST HTTP), debe informar alCategory del producto. El cliente debe conocer las categorías de antemano, por supuesto. Imagina en JSON algo como:

{
   "quantity": "10",
   "state": "PRODUCED",
   "category": {
      "id": "123"
   }
}

Bueno, la categoría con id.123 podría no existir. Si intentamos insertar esto en la base de datos, obviamente obtenemos una excepción relacionada con la clave externa. Entonces, asumo que tenemos que validar estos problemas y devolver un mensaje adecuado al cliente, al igual que en las validaciones de propiedades regulares.

Ahora, mis principales preguntas son:

Ahora mismo estoy realizando la validación en el nivel de acceso a datos, a través de la integración de JPA con la validación de Bean. ¿Deben realizarse las validaciones?Procesos de serialización antes / después., operaciones de base de datos antes / después oambos?Cómo manejarValidaciones de integridad de datos? ¿A mano? (es decir, consultando explícitamente la base de datos que verifica la integridad de los datos) ¿O deberíamos intentar insertarlo de todos modos y luego detectar excepciones en la base de datos (o DAO)? La validación de frijoles no tiene nada que ver con este tipo de validación, ¿verdad?Si tiene alguna experiencia con JAX-RS / REST y la validación de frijoles, me alegraría que me lo comunique. ¿Usando grupos?

Estas preguntas están algo relacionadas con Java, pero también esperaba obtener algunas perspectivas nuevas sobre estos asuntos. Algunas tecnologias independientes. :) Sería genial si pudiera proporcionar sus propias soluciones para estos problemas en sus servicios web REST.

Respuestas a la pregunta(4)

Su respuesta a la pregunta