whirlpool washing quiet partner machine español dishwasher web-services exception-handling soapfault

web-services - washing - whirlpool quiet partner ii manual español



¿Fallas SOAP u objeto de resultados? (4)

Creo que la respuesta corta es utilizar un error de omisión, a menos que sepa que el cliente estará equipado para manejar un error devuelto como resultado. También estaba pensando en la analogía entre excepciones y resultados de errores, como se menciona en las otras respuestas.

Hay áreas grises que podrían tratarse razonablemente como excepciones y como errores de resultado según las necesidades del cliente. A continuación, puede proporcionar un parámetro al servicio que modifique la forma en que se devuelve este tipo de error. El valor predeterminado es usar un error SOAP, pero si el cliente establece el parámetro para obtener resultados de error, entonces indica que está dispuesto a manejar esto como parte del resultado. Para mí, los errores de validación están en esta área gris. Para la mayoría de los clientes, se deben considerar fallas, pero si el cliente desea usar los datos para marcar la UI con errores de validación, devolver los errores de validación como parte del resultado puede ser más útil.

Estaba conversando sobre esto con un compañero de trabajo y no pudimos llegar a un acuerdo, así que quería expresar sus ideas. Tengo mis propias opiniones sobre esto, pero no lo arruinaré por ti.

¿Cuándo debo devolver un error SOAP y cuándo debo devolver un objeto resultante que tenga información de error? Supongamos que se trata de un servicio web genérico que puede ser consumido por varios sistemas (.NET, Java, lo que sea). El objeto resultante tendría un indicador isError, un errorType (similar al tipo de excepción específica) y un mensaje.

Algunos puntos a considerar:

  1. ¿Es un error de validación de datos una falla?
  2. ¿Debería haber una combinación de fallas (para casos muy excepcionales) y el objeto de resultados (para errores "esperados")?
  3. ¿Cómo agruparías las fallas de SOAP (crítica [referencia nula] frente a validación [código postal incorrecto])?
  4. Fail-fast vs tener que recordar verificar el error
  5. Mejores prácticas, patrones, estándares, etc.

Los enlaces a los artículos son válidos. A pesar de que suena como que quiero tu opinión, apégate a los hechos (x es mejor debido a y y z ...)


La mayoría de los clientes SOAP convertirán las fallas en una excepción de tiempo de ejecución (si es algo que el lenguaje del cliente admite). Con eso en mente, creo que podría reformular la pregunta como "¿Cuándo quiero lanzar una excepción en lugar de devolver un valor de error"? Estoy seguro de que puedes encontrar muchas opiniones sobre el diseño de API en general y sobre ese tema en particular.

Dicho esto, devolver un error generalmente no es útil para el cliente:

  1. El cliente necesita enumerar y manejar manualmente sus códigos de error, en lugar de permitir que el código de código auxiliar genere y genere una excepción del tipo apropiado. El uso de códigos de error evita que el cliente use técnicas orientadas a objetos como el manejo de excepciones por superclase.

  2. Si no convierte sus códigos de error en parte del WSDL; el cliente no tendrá documentación sobre lo que son o cuándo ocurren. Las fallas tipográficas son parte del WSDL y, por lo tanto, (hasta cierto punto) documentadas por sí mismas.

  3. Los mensajes de error pueden contener un contexto específico del error que el cliente puede utilizar para informar y recuperar errores. Por ejemplo, arrojando un error de validación de entrada que contiene el elemento de entrada inválido real y un motivo. Si devuelve un resultado con un código de error y una cadena opaca, el cliente no tiene más remedio que pasar su mensaje de error al usuario, lo que rompe la internacionalización, la consistencia de la interfaz de usuario, etc.

Para responder a sus preguntas específicas:

  1. Un error de validación es un error. Imagínese si invoca el servicio web desde un cliente AJAX con capacidad limitada para manejar errores; desea que el servicio devuelva un código HTTP 5xx, no un código de éxito 400 con alguna respuesta inesperada.

  2. No. Las API deberían proporcionar interfaces de informes de errores coherentes. El diseño de WSDL es diseño de API. Obligar al cliente a implementar dos manejadores de errores distintos no facilita la vida del cliente.

  3. El diseño de fallas debe reflejar su modelo de solicitud / respuesta y mostrar información apropiada para la abstracción del servicio. No diseñe una falla de NullReference; diseñar un XYZServiceRuntimeFault. Si los clientes suelen proporcionar solicitudes no válidas, diseñe un InvalidRequestFault, con las subclases apropiadas para que los clientes puedan descubrir rápidamente dónde están los datos no válidos.


La regla que sigo en el diseño del servicio es:

  • respuesta de nivel empresarial (incluso excepciones comerciales) en objetos de respuesta
  • fallas de nivel técnico / de integración en Soap Fault

El consumidor del servicio puede confiar en que todo tipo de respuesta empresarial se presenta como respuesta a los objetos y se la presenta a los usuarios del servicio (de negocios). Las fallas de jabón se usan solo cuando la respuesta comercial no se puede entregar.

Las Fallas de jabón deberían desencadenar una advertencia / acción de soporte a través del monitoreo.


Un objeto de resultados solo debe contener resultados. Si su objeto de resultado proporciona una lista de errores que han ocurrido en otro sistema, entonces ese es un ejemplo de cuándo puede tener un indicador de "isError"; de lo contrario, no puede porque un resultado es válido o no.

Siempre debe usar un SOAPFault cuando ocurra un error. La validación es un error, y es la propia trampa del demonio pensar que la validación es menos severa que la incapacidad de abrir una base de datos. Ambos casos tienen el mismo impacto: la operación no se puede completar según lo solicitado.

Por lo tanto, debe usar los objetos de resultado para los resultados y las fallas de SOAP para cualquier cosa que impida un objeto de resultado válido; incluyendo, entre otros, errores, fallas de validación, advertencias, fallas de bus, etc.

En los días anteriores a las excepciones no había otra opción y, como resultado, muchas API se volvían inconsistentes y la mayoría de las API diferían en cómo devolver un error. Era (y sigue siendo) horrible, confuso y, a menudo, ralentiza el desarrollo porque debe buscar cómo cada entrada de API devuelve un error y, a menudo, cómo decodificar o descubrir más sobre el error.

  1. Manejar la validación con SOAPFaults / Exceptions es más lógico cuando lo piensas, y una vez que lo piensas, suele ser más fácil. Necesita diseñar la clase de falla de validación para que contenga información suficiente para identificar los elementos ofensores de una manera que no necesariamente requiera la solicitud original. De esta forma, puede comenzar a manejar los errores de validación de forma más genérica.

  2. Si el objeto de resultados contiene errores, solo pueden estar dentro del dominio de los resultados; por ejemplo, Producto agotado porque alguien en el almacén no puede contar está dentro del dominio de control de inventario.

  3. No es aconsejable hacer la distinción entre un error crítico y un error de validación, esto en mi opinión no es una comparación válida porque cualquier asignación de nivel de gravedad es muy subjetiva. Por ejemplo, en un sistema que proporciona información sobre productos químicos a un bombero, crítico probablemente signifique que el camión en llamas transporta UN 1298 y ONU 1436 y no es una referencia nula cuando se intenta cargar el gráfico de advertencia.

    Diseñe las fallas para permitir que sean identificadas de forma concisa y manejadas en consecuencia. Asegúrese de que transmiten suficiente información. La categorización precipitada es algo que no es necesario cuando tienes suficiente información porque la falla permitirá que se identifique.

  4. Los SOAPFaults convertidos en Excepciones son la forma más segura de tener un fail-fast.

  5. Mejores prácticas, referencias, etc.