Версионность интерфейсов взаимодействия клиент-сервера
От: Nikolay_P_I  
Дата: 03.12.13 06:08
Оценка:
Ситуация:

Сервер и клиенты (WCF, но вопрос общий) взаимодействуют через интерфейс I1. Через некоторое время добавляется функция. Часть серверов теперь работают на I1, Часть на I2. Совместимость обратная есть, просто на старых серверах фича отключена. Вопрос: как правильнее разруливать на клиентах эту ситуацию ? Пока в голову приходит сразу на старте добавлять I1.GetVersion() и смотреть, какие функции где реализованы.
Re: Версионность интерфейсов взаимодействия клиент-сервера
От: Sinix  
Дата: 03.12.13 07:21
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

N_P>Вопрос: как правильнее разруливать на клиентах эту ситуацию ?


А какие варианты тут могут быть?
Если клиенты ваши — обновлять их на последнюю версию и не мучаться. Если не ваши — поддерживать обе версии API, доступ к каждой по отдельному адресу.
Re: Версионность интерфейсов взаимодействия клиент-сервера
От: Kudriako Украина  
Дата: 03.12.13 08:02
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

N_P> Пока в голову приходит сразу на старте добавлять I1.GetVersion() и смотреть, какие функции где реализованы.


В аналогичной ситуации решили передавать номер версии клиента как параметр каждого запроса, сервер теперь знает, клиент какой версии к нему обратился, и как именно обрабатывать запрос.
Поскольку мы строим REST API на базе ASP.NET MVC, то uri выглядит примерно так: http://mywebsite.com/api/v11/someentity?parameters
Re[2]: Версионность интерфейсов взаимодействия клиент-сервера
От: Nikolay_P_I  
Дата: 03.12.13 08:41
Оценка:
Здравствуйте, Kudriako, Вы писали:

N_P>> Пока в голову приходит сразу на старте добавлять I1.GetVersion() и смотреть, какие функции где реализованы.


K>В аналогичной ситуации решили передавать номер версии клиента как параметр каждого запроса, сервер теперь знает, клиент какой версии к нему обратился, и как именно обрабатывать запрос.

K>Поскольку мы строим REST API на базе ASP.NET MVC, то uri выглядит примерно так: http://mywebsite.com/api/v11/someentity?parameters

Наоборот — сервер разной версии. То есть 1 клиент и 2 сервера. 1 сервер умеет делать отчет А,Б второй только отчет А. Подключиться можно и туда и туда. Достаточно выдать "функция не поддерживается". Вопрос — как лучше делать. Как минимум сначала надо узнать — какую версию реализует сервер.
Re[2]: Версионность интерфейсов взаимодействия клиент-сервера
От: Nikolay_P_I  
Дата: 03.12.13 08:42
Оценка:
Здравствуйте, Sinix, Вы писали:

N_P>>Вопрос: как правильнее разруливать на клиентах эту ситуацию ?


S>А какие варианты тут могут быть?

S>Если клиенты ваши — обновлять их на последнюю версию и не мучаться. Если не ваши — поддерживать обе версии API, доступ к каждой по отдельному адресу.

Клиенты обновлены — половина серверов старая
Re[3]: Версионность интерфейсов взаимодействия клиент-сервера
От: Sinix  
Дата: 03.12.13 09:52
Оценка: +1
Здравствуйте, Nikolay_P_I, Вы писали:

N_P>Клиенты обновлены — половина серверов старая

Ну... это вообще минное поле на холостом ходу. Нафиг такие эксперименты в продакшне?
Re[4]: Версионность интерфейсов взаимодействия клиент-сервера
От: Nikolay_P_I  
Дата: 04.12.13 05:46
Оценка:
N_P>>Клиенты обновлены — половина серверов старая
S>Ну... это вообще минное поле на холостом ходу. Нафиг такие эксперименты в продакшне?

А что делать ? Это реальность. Клиент берет данные с сервисов, что стоят в филиалах. А там — в одном поменяли, в другом "у нас админ болеет". Самим нам сервис не переставить. Всё. Надо работать с кашей версий. Отличия небольшие, обратная совместимость есть. Как лучше делать ? Пока у меня 2 соображения: Поддерживать оба интерфейса. Ввести в интерфейс номер версии и на клиенте не лезть к функциям, что в этой версии нет. Вопрос в том — что в мире для этого придумали ?
Re[5]: Версионность интерфейсов взаимодействия клиент-сервера
От: Sinix  
Дата: 04.12.13 06:16
Оценка:
Здравствуйте, Nikolay_P_I, Вы писали:

N_P>Вопрос в том — что в мире для этого придумали ?


Принудительное обновление серверов. Можно самый дешёвый вариант, в виде рассылки приказа и трендюлей за неисполнение. Обходится в n раз дешевле, чем переписывание кода. Альтернатива — поддержка нескольких плохосовместимых протоколов клиентом и трата на это времени тестеров. Ну и всякие сопутствующие фейлы из-за "в филиале посчиталось неправильно".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.