¿Cuál es un buen patrón de diseño para los valores de retorno de los métodos web?

StackOverflow https://stackoverflow.com/questions/39585

  •  09-06-2019
  •  | 
  •  

Pregunta

Al codificar servicios web, ¿cómo estructura sus valores de retorno?¿Cómo se manejan las condiciones de error (esperadas e inesperadas)?Si devuelve algo simple como un int, ¿lo devuelve simplemente o lo incrusta en un objeto más complejo?¿Todos los métodos web dentro de un servicio devuelven una instancia de una sola clase o se crea una clase de valor de retorno personalizada para cada método?

¿Fue útil?

Solución

Me gusta el patrón de objeto Solicitud/Respuesta, donde encapsulas tus argumentos en una única clase de Solicitud [Operación], que tiene propiedades públicas simples.

Algo así como AddCustomerRequest, que devolvería AddCustomerResponse.

La respuesta puede incluir información sobre el éxito o el fracaso de la operación, cualquier mensaje que pueda utilizar la interfaz de usuario y, posiblemente, el ID del cliente que se agregó, por ejemplo.

Otro buen patrón es hacer que todos estos deriven de una interfaz IMessage simple, donde su punto final general es algo así como Proceso(params IMessage[] mensajes)...De esta manera puede pasar múltiples operaciones en la misma solicitud web.

Otros consejos

+1 por la respuesta de Ben.

Además, sugiero considerar que la respuesta genérica permita múltiples elementos de error/advertencia, para permitir que la respuesta sea lo más completa y procesable posible.(¿Le gustaría utilizar un compilador que se detuviera después del primer mensaje de error o uno que le dijera todo lo posible?)

Si está utilizando servicios web SOAP, entonces Fallas de jabón son la forma estándar de devolver detalles de error, donde los mensajes de error pueden devolver cualquier detalle adicional que desee.

Las fallas de Soap son una práctica estándar donde la aplicación que llama es un cliente de Soap.Hay casos, como un cliente COM que utiliza XMLHTTP, en los que el SOAP se analiza como XML y los errores de SOAP no se pueden manejar fácilmente.Todavía no puedo votar, pero otro +1 para @Ben Scheirman.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top