Manejo de Errores

PAUT-0033 (Pauta)

Resumen de la pauta:
* La notificación de errores dentro de los Servicios Webs deberá realizarse mediante el empleo de SOAP Faults.
* Siempre que sea posible, los mensajes SOAP Faults seguirán la estructura definida en la especificación SOAP 1.2 en lugar de la recogida en SOAP 1.1
* Se deberá evitar incluir dentro de los mensajes de error información sensible del servicio, detalles de la implementación del mismo e información no útil, de cara a los consumidores, dentro de los mensajes de error.

Tipo de Errores

Dentro de toda llamada por Servicios Webs se pueden dar tres tipos básicos de errores:

  • Errores en la invocación del servicios.
  • Errores específicos del servicio.
  • Warnings.

Los errores en la invocación del servicio, corresponden con errores independientes a los consumidores y productor del servicio que afectan a cuestiones de protocolos, comunicaciones, frameworks, etc. Estos errores son capturados y notificados automáticamente por los framework de Servicios Webs empleado, generando normalmente, mensajes del tipo SOAP Fault para notificar los mismos. Este tipo de errores, dado su carácter genérico no son incluidos dentro del WSDL del servicio.

Los errores específicos del servicio, pueden ser notificados mediante mecanismos genéricos y estandarizados; como los SOAP Faults, o mediante mecanismos propietarios de las aplicaciones como; mensajes o campos específicos de error. Dentro de la junta, ha sido muy habitual la notificación de los errores dentro de campos creados para tal efecto dentro de las respuestas de WS.

La recomendación de MADEJA es que los errores de aplicación se notifiquen mediante el empleo de SOAP Faults, en lugar de mecanismos particulares de cada aplicación. Los SOAPs Fault generados por un servicio deberán ser recogidos dentro del WSDL del servicio.

Dentro de la ejecución de un servicio, se pueden dar casos en los que se detecten errores que no impidan la ejecución del mismo, estos errores son conocidos como warnings. En ciertos servicios puede ver conveniente notificar estos warnings a los consumidores de los servicios empleando soluciones particulares en cada caso. Madeja no definirá, por el momento la forma de notificación de warnings en los servicios, dejando que cada servicio elija la implementación o no de dichos mecanismos.

Soap Fault

El mecanismo estándar para la definición de los errores dentro de un Servicio Web es el SOAP Fault. Las etiquetas Soap fault varían entre las distintas especificaciones de SOAP 1.1 y SOAP 1.2.

La recomendación de madeja es que se siga, siempre que sea posible, la definición de SOAP Fault recogida en la especificación SOAP 1.2 en lugar de la recogida en SOAP 1.1.

En los casos en los que no sea posible y se siga la versión recogida en SOAP 1.1, se deberá seguir las restricciones puestas en la WS-I, evitándose el empleo de dot Code.

Recomendaciones básicas para Errores del Servicio

  • Los errores han de ser comunicados de forma independiente al S.O., lenguaje de programación y aplicación.
  • Los errores han de ser presentados de tal forma que se facilite su interpretación y procesado. Para cumplir este concepto se recomienda la utilización de códigos y subcódigos de error.
  • Nunca exponer detalles internos de implementación del servicio a los consumidores, ya que esto supone un riesgo de seguridad para el propio servicio y aporta información NO Útil de cara al consumidor del mismo.
  • Nunca devolver la traza de las excepciones. La traza de las excepciones aporta mucha información no útil para el consumidor y expone detalles de implementación del servicio.
  • Sólo los errores tratables por el consumidor, por ejemplo los referentes a errores en los parámetros de entrada del servicio, deben ser notificados de forma detallada. Errores no procesables por el consumidor, como pej. la caída de una B.D., deberán ser enmascarados y transmitidos mediante un error genérico ("pej. Error interno").