Versioning - сложная тема, поэтому сначала вам нужно определить свои цели более наглядно. Было бы здорово сказать, что у вас есть интерфейс, гарантирующий, что вы никогда не нарушите совместимость, но в зависимости от того, что такое новая функциональность, это может быть даже невозможно. Таким образом, существуют разные ситуации и разные компромиссы.
Если вы намерены предоставлять новые функции только новым пользователям, а все ваши потребители являются прямыми потребителями (без посредников, фреймворков и т. Д.), То выбор оптимальной конечной точки - лучший выбор. Каждый раз, когда вы добавляете функцию, которая рискует перерывом, создайте новую конечную точку, дайте ей новый номер версии, а затем пусть потребители узнают, чтобы проверить ее и переключить их конфигурации. Эта стратегия довольно испробована и верна, но у нее есть недостатки в том, чтобы возлагать нагрузку на потребителей на постоянную актуальность. Кроме того, если есть зависимости между службами, это может стать основной задачей для отслеживания. Воспроизведение вверх, если код сломается, не является (напрямую) вашей ошибкой.
Другой основной стратегией является расширяемый интерфейс. Здесь есть три разных разновидности, о которых я знаю. Во-первых, это тип интерфейса, который так хорошо описывает домен службы, что каждая возможная функция, которую вы могли бы добавить, каким-то образом возможна с учетом существующего интерфейса. Если это звучит сложно, это так. Вы можете назвать это идеальным интерфейсом. Все полностью описано, но весь домен также полностью описан. «Совершенно» действительно только на бумаге.
Второй сорт - это тип, который выглядит как обычный интерфейс, но добавляет общие точки расширения. В WSDL это означает, что xs: любые, пары имя-значение или что-то подобное. Вы можете назвать это основным расширяемым интерфейсом. Это не слишком сложно сделать, но это не без осложнений. Точки расширения могут затруднить работу интерфейса в определенных инструментах (xs: any) или явно потерять часть вашей способности проверять входы и выходы (пары имя-значение). Также довольно легко злоупотреблять этими точками расширения таким образом, чтобы сделать версию 3 или 4 довольно сложно использовать.
Третий сорт - это тип, который преобразует ваш интерфейс в байтовый поток. Вы можете назвать эти интерфейсы богов. Они не лишены своих оправданий, но если вы используете их, вы можете спросить, почему вы используете веб-службы вообще. Возможно, вам стоит подумать о необработанном TCP/IP или базовом HTTP GET/POST. Но, может быть, вам надоела сложность WSDL и XSD, и вы просто хотите начать с нуля, но вы привязаны к веб-сервисам по какой-то причине инфраструктуры. Поймите, однако, что, как только вы начнете с этого пути, вам понадобится совершенно новый способ описать вашим потребителям, как/не использовать вашу службу, и если вы используете XSD для этого. Ну, вы в основном назад, где ты начал.
Лучше всего знать все эти варианты и подойти к дизайну сервиса, сначала попробовав «идеальный интерфейс», а затем откажитесь от добавления и добавьте общие точки расширяемости. Попытка разработать идеальный интерфейс заставит вас научиться вещам, которые улучшат ваше обслуживание, а не только ваш интерфейс, но для этого потребуется время, и если вы не ограничите это время, это будет навсегда.
Немного отстает от интерфейса истинного бога, есть интерфейс оболочки. Если у вас есть слои, вы хотите, чтобы ваш интерфейс тоже был в слоях. Когда вы меняете слой B, вы хотите изменить слой B, а не все экземпляры в слое C.
Это будет работать только в том случае, если Версионированные веб-службы принимают * точно * те же аргументы, поэтому применяется тот же WSDL. Если в новой версии требуется добавление нового атрибута, что вы делаете? –