La creación de versiones es un tema complejo, por lo que primero debe definir sus objetivos de una manera más descriptiva. Sería genial decir que tienes una interfaz que asegura que nunca vas a romper la compatibilidad, pero dependiendo de cuál sea la nueva funcionalidad, es posible que ni siquiera sea posible. Entonces, hay diferentes situaciones y diferentes intercambios.
Si su intención es proporcionar nuevas funcionalidades a nuevos consumidores, y todos sus consumidores son consumidores directos (sin intermediarios, marcos, etc.), entonces un enfoque de punto final discreto es la mejor opción. Cada vez que agrega una función que arriesga una interrupción, cree un nuevo punto final, asígnele un nuevo número de versión y luego informe a los consumidores para que validen y cambien sus configuraciones. Esta estrategia es bastante probada y cierta, pero tiene los inconvenientes de poner la carga en los consumidores para mantenerse al día. Además, si hay dependencias entre los servicios, puede convertirse en una tarea rutinaria. La ventaja es que si el código se rompe, no es (directamente) tu culpa.
La otra estrategia principal es la interfaz extensible. Aquí hay tres variedades diferentes de las que tengo conocimiento. En primer lugar, es el tipo de interfaz que trata de describir tan bien el dominio del servicio que cada característica posible que puede agregar es de alguna manera posible dada la interfaz existente. Si eso suena difícil, lo es. Puede llamar a esto la interfaz perfecta. Todo está completamente descrito, pero el dominio completo también está completamente descrito. El "perfecto" en realidad solo está en papel.
La segunda variedad es del tipo que se parece a una interfaz normal pero agrega puntos de extensión genéricos. En WSDLs esto significa xs: any, pares de nombre-valor o algo similar. Puede llamar a esto la interfaz extensible básica. No es demasiado difícil de hacer, pero no sin complicaciones. Los puntos de extensión pueden hacer que la interfaz sea más difícil de trabajar en ciertas herramientas (xs: any), o perder algo de su capacidad para validar las entradas y salidas (pares nombre-valor). También es bastante fácil abusar de esos puntos de extensión de una manera que hace que la versión 3 o 4 sea bastante difícil de usar.
La tercera variedad es el tipo que convierte su interfaz en un byte-stream. Puede llamar a estas interfaces de dios. No están sin sus justificaciones, pero si está utilizando uno, es posible que desee preguntar por qué está utilizando los servicios web en absoluto. Tal vez deberías pensar en TCP/IP sin formato o HTTP GET/POST básico. Pero tal vez estés harto de la complejidad de WSDL y XSD, y solo quieres empezar de cero, pero estás ligado a los servicios web por algún motivo de infraestructura. Sin embargo, tenga en cuenta que una vez que comience por este camino, necesitará una forma completamente nueva de describir a sus consumidores cómo/no usar su servicio, y si usa XSD para eso ... bueno, básicamente está de vuelta donde tú empezaste.
Lo mejor que puede hacer es conocer todas estas opciones y acercarse al diseño de su servicio intentando primero la "interfaz perfecta", luego renunciando y agregando puntos genéricos de extensibilidad. Intentar diseñar la interfaz perfecta te obligará a aprender cosas que mejorarán tu servicio, no solo tu interfaz, pero llevará tiempo, y si no limitas ese tiempo de alguna manera, tomará una eternidad.
Un poco lejos de una verdadera interfaz de dios, existe la interfaz de la envoltura. Si su sistema tiene capas, también quiere que su interfaz esté en capas. Cuando cambie la capa B, solo desea cambiar la capa B, no todas las instancias en la capa C.
Esto funcionaría sólo si los servicios web con versiones toman * exactamente * la mismos argumentos, por lo que se aplica el mismo WSDL. Si en una nueva versión requiere la adición de un nuevo atributo, ¿qué haces? –