Performance en la petición a un Web Service
Hola chavos, como han estado. De nuevo les tengo una consulta esperando que me den sus puntos de vista. La duda es al siguiente:
Hice un desarrollo el cual consistia (creo se acordarán) en consumir web services con JAX-WS y generar un servicio que serve de puente entre los originales y el cliente que lo consuma, pues bien, esto ya esta hecho solo que la pregunta va en este sentido, mis metodos del Servicio Puente que hice reciben un Objeto X con aprox 30 propiedades, pero no necesariamente viajan con datos todas las propiedades en cada petición ya que son distitas para cada método, es decir , en buscarCliente por ejemplo solo le deben setear 5 propiedades de las 30, en buscarBeneficiario, le deben setear 4 de las 30 y así sucesivamente para cada método, la pregunta del millón es si se ve afectado el performance de peticiones a mi WS por el tamaño de mi Mensaje SOAP que se genera al enviar propiamente la petición ya que todo el objeto viaja aunque la mayoria de sus propiedades no vaya con datos???.
Cabe destacar que mi clase la hice generica para todos mis metodos publicados en el WS puente, ya que el 80% de sus propiedades se comparten entre cada servicio y no le vi el caso de hacer una clase que solo varie en 2 o 3 propiedades para cada petición, claro esta que con esto se enviaria un objeto mas pequeño en cada petición pero del lado del servidor tendría mas clases y no solo una.
No se si sea conveniente dejarlo así o hacer una clase distinta para cada método.
Lei el artículo que posteo @ezamudio hacerca de Como no hacer Web Services y @OscarRyz comentó NO MANDAR ( ni en la petición ni en la respuesta ) MÁS INFORMACIÓN QUE LA ESTRICTAMENTE NECESARIA!
Esto aplica para mi pregunta? pero creo el performace en mi caso (solo en peticiones al WS) dependeria extrictamente de la velocidad de la red??? no sé??? exíste algún otro factor???
El cliente sera .Net, pero al consumirlo solo setea los valores necesarios para cada metodo a invocar, los demás ni los toca pero al enviar la petición al final de cuentas se genera el mensaje SOAP con todo el objeto con sus propiedades vacias excepto las seteadas.
Bueno espero haberme explicado... y espero su comentarios vale.
- Inicie sesión o regístrese para enviar comentarios
Si son nulos no se envían en
Si son nulos no se envían en el mensaje y no impactan.
Solamente re-revisa que de verdad vayan nulos y después habrá que buscar donde mejorar el performance en otro lado.
Puede haber impacto
Más allá del ancho de banda usado, que del lado del servidor puede ser importante si hay demasiado tráfico, se puede afectar el desempeño porque al momento de convertir el XML a objetos, aunque al final el objeto generado tenga un buen de propiedades que se quedan nulas, pues se tuvo que parsear ese XML (esto al momento de recibir una petición). Y al momento de recibir una respuesta, aunque sea un objeto con 30 propiedades y sólo tenga 5 valores, pues se van a convertir todas las propiedades con valores nulos a XML, de modo que sí hay un impacto en el desempeño, por estar convirtiendo entre objetos y XML puros campos nulos.
Y además, cuando los usuarios del web service generen su cliente con la herramienta que sea, casi seguro les va a generar una clase distinta para cada método. Es decir, aunque tú tengas una clase Datos y la definas como único parámetro en 5 métodos de tu web service, el WSDL de tu servicio queda de manera que los clientes (ya sean .NET o Java o lo que sea), van a quedar con 5 métodos y cada método tiene un objeto de una clase distinta (Datos1, Datos2, Datos3, Datos4, Datos5 por decir algo). Tomando en cuenta esto, pues lo mejor es que para cada método tengas una clase específica para cada método, que contenga los datos necesarios (puedes usar una misma clase en varios métodos si es que esos métodos necesitan recibir los mismos datos). Y lo mismo va para los valores de retorno; en vez de tener una clase que se usa para todas las respuestas, y que tienen un montón de campos pero cada método solamente usa algunos, mejor tener clases específicas para el valor de retorno de cada método (igual, puedes usar la misma clase en varios métodos si es que van a devolverse exactamente los mismos campos).
Tips aplicados
Gracias @ezamudio & @Ryz, me sirvieron de mucho sus consejos, los estoy aplicando y trato de mejorar el rendimiento del lado del servidor.
Saludos.