lunes, 4 de junio de 2007

Web Services Manejables

Hola que tal! de nuevo por aqui

Como se habran dado cuenta, hace algunos dias hablamos (o nos quejamos jeje ) del diseno de unos servicios web.... aqui les dejo unas recomendaciones (Best Practices) a tomar en cuenta, quiza sean simples... pero elementales.. aunque muchas ocasiones no se siguen ;)
  • NO usar elementos simples en las firmas de los metodos ; tomando como ejemplo public int obtenerCotizaciones(int nss), tenemos un problema: la escalabilidad del mensaje, si desearamos agregar la fecha de alta trendriamos que colocarlo de la siguiente manera public int obtenerCotizaciones(int nss,long fecha).. MAL , en lugar de eso debemos modelar un objeto que defina mi negocio (tanto entradas como salidas).... siguiendo con el ejemplo definamos:
    • public class entradaCotizaciones {
      private int nss;
      private long fecha;
      }
    • public class salidaCotizaciones {
      private int numeroCotizaciones;

      private boolean error;
      private int codigoError;
      private String descripcion;

      }
    • public salidaCotizaciones obtenerCotizaciones(entradaCotizaciones entrada)
Esto permitita escalar el mensaje sin alterar la manera de invocar siempre que sea necesario.
  • Usar Built-Data Types al disenar el XSD del servicio
  • Si se pretende utilizar mensajes estandar (Hl7, eGov, xCIL, XNAL), evitar el uso de anyType en el envio del mensaje, es recomendable generar un modelo de negocio basado en los XSD que vienen con el estandar.
  • Muy importante, definir los elementos para el manejo de errores, que permitan manipular la respuesta de acuerdo a las condiciones que se presenten
    • private boolean error; // describe si existie o no error
      private int codigoError; // indica el tipo del error
      private String descripcion; // describe que fue lo que sucedio
Como veran son muy simples, pero son la base para generar Servicios Web manejables y escalables en el mensaje.

Va pues, comentarios bienvenidos :)

Por una integracion mejor, hasta la vista!

Tuzo

1 comentario:

ChilliCoder dijo...

Mi estimado Sr. Don Tuzo, coincido con lo que presenta en la mayor parte de su post. Sin embargo (siempre hay un pelo de tuzo en la sopa) el manejo de errores creo que se puede mejorar.
La estructura que presenta asume que solo se va a presentar un error por invocación, cosa que automáticamente excluye errores anidados o resultados al pasar colecciones. Creo que quedaría mejor algo así como:
boolean isError;
Error[] errors;

y Error es igual a:
int codigoError;
string descripcion;