Size: a a a

2020 August 03

MS

Max Syabro in ctodailychat
там личная просьба
источник

СА

Сергей Аксёнов... in ctodailychat
Oleg Batashov
Всем добрый вечер :)

Немного отредактировал вопрос и подвинул вниз, народ стягивается к вечеру.

У кого есть опыт организации одновременной работы с несколькими версиями стороннего API?

Контекст - у Azure есть API для виртуальных десктопов версий v1 и v2 без обратной совместимости.

Сценарии использования - всеми новыми десктопами рулить через v2, а созданными через v1 - через v1
При этом 90% полей и юз кейсов будут те же, только разные апи - новое лучше интегрировано в  Azure, его RBAC и UI

Думал о branch by abstraction из trunk-based, но он больше о переходе с X на Y по описанию

Наверняка есть конкретные паттерны, практики или идеи на этот счёт
Изобретать велосипед очень не хочется

Спасибо!
А что значит "рулить"? Что за конструкция на управляющей стороне? Человек? Скрипт? Демон? Проект с фронтом и бэком?
источник

Y

Yaroslav in ctodailychat
Oleg Batashov
Спасибо, наверно я плохо сформулировал вопрос
Ansible playbooks - это ответ на вопрос чем автоматизировать какие-то сценарии развертывания?

Добавляю контекст - они уже автоматизированы через v1 API + PowerShell скрипты

Ручка нашего API ходит в API Azure + используется PowerShell для части развертывания где идёт работа с on-premise active directory

BFF - как я понял задуман как разные наборы ручек API для разных клиентов вроде веб/мобилка- iOS/Android
У нас клиент один, это веб админка

Вопрос в том, как добавить параллельно поддержку ещё одной версии Azure API
То есть большая часть кода развертки одинакова, отличия будут в тех частях где ходим в апи

И какая-то диспетчеризиция - клиент удаляет старый десктоп в админке (создан через V1) - удаляем через V1
Создаёт новый десктоп и редактирует/удаляет - через V2

Это напоминает какую-то схему или проблему с well known решением?
Понимаю что пули нет, но ищу куда подглядеть :)
> Вопрос в том, как добавить параллельно поддержку ещё одной версии Azure API
То есть большая часть кода развертки одинакова, отличия будут в тех частях где ходим в апи

берешь пишешь свой BFF  и делаешь в нем api mashup

условно у тебя все вызовынифицированы и отправляют всю информацию которая есть, а bff делает нужные тебе вызовы ( v1 или  v2) в зависимости от того что тебе пришло
источник

Y

Yaroslav in ctodailychat
BFF -> скрывает реализацию от клиентского приложения. Пусть он думает о том, какое API использовать
источник

AP

Alexander Panko in ctodailychat
Oleg Batashov
Спасибо, наверно я плохо сформулировал вопрос
Ansible playbooks - это ответ на вопрос чем автоматизировать какие-то сценарии развертывания?

Добавляю контекст - они уже автоматизированы через v1 API + PowerShell скрипты

Ручка нашего API ходит в API Azure + используется PowerShell для части развертывания где идёт работа с on-premise active directory

BFF - как я понял задуман как разные наборы ручек API для разных клиентов вроде веб/мобилка- iOS/Android
У нас клиент один, это веб админка

Вопрос в том, как добавить параллельно поддержку ещё одной версии Azure API
То есть большая часть кода развертки одинакова, отличия будут в тех частях где ходим в апи

И какая-то диспетчеризиция - клиент удаляет старый десктоп в админке (создан через V1) - удаляем через V1
Создаёт новый десктоп и редактирует/удаляет - через V2

Это напоминает какую-то схему или проблему с well known решением?
Понимаю что пули нет, но ищу куда подглядеть :)
если сторонний api дергается С вашего бэкегда то в чем проблема? по клиенту и выполняемой функции однозначно определяется версия стороннего api которую надо дернуть
источник

A

Alexander in ctodailychat
Я конечно не настоящий сварщик, но задачу точно нужно решать? У меня как-то была проблема с каким-то конкретным железом у облачного провайдера. Чудом выяснил что проблема хардозависимая и при деплое создавал сервер, проверял скирптом что он норм, если не норм - убивал и создавал заново.
источник

OB

Oleg Batashov in ctodailychat
@SergeAx С точки зрения клиента, рулить - использовать нашу админку для управлениями своими десктопами в облаке Azure
По юз кейсам все одинаково, разница в том, что созданные после релиза поддержки V2 десктопы будет видно и в админке Azure
Что создано через V1 - увы нет, только через API видно (собственно киллер фича, не все клиенты могут в API/powershell скрипты чтобы себе что-то развернуть)
Microsoft выкатили V2 и клиентам стало проще, нам - надо его поддерживать тоже
С точки зрения разработки, управлять - запускать код, создавать десктопы в Azure API, настраивать on-premise active directory, смесь дотнета и скриптов на powershell
источник

СА

Сергей Аксёнов... in ctodailychat
Oleg Batashov
@SergeAx С точки зрения клиента, рулить - использовать нашу админку для управлениями своими десктопами в облаке Azure
По юз кейсам все одинаково, разница в том, что созданные после релиза поддержки V2 десктопы будет видно и в админке Azure
Что создано через V1 - увы нет, только через API видно (собственно киллер фича, не все клиенты могут в API/powershell скрипты чтобы себе что-то развернуть)
Microsoft выкатили V2 и клиентам стало проще, нам - надо его поддерживать тоже
С точки зрения разработки, управлять - запускать код, создавать десктопы в Azure API, настраивать on-premise active directory, смесь дотнета и скриптов на powershell
Я так понимаю, что надо просто написать прокладку между своим внутренним API и Azure, которая уже будет решать, по какой версии протокола отправлять команды в Azure. С точки зрения ООП это интерфейс, абстрактный класс, реализующий одинаковые там и там функции, и два его наследника, реализующие отличия v1 и v2. Нет?
источник

IV

Igor V in ctodailychat
Oleg Batashov
Спасибо, наверно я плохо сформулировал вопрос
Ansible playbooks - это ответ на вопрос чем автоматизировать какие-то сценарии развертывания?

Добавляю контекст - они уже автоматизированы через v1 API + PowerShell скрипты

Ручка нашего API ходит в API Azure + используется PowerShell для части развертывания где идёт работа с on-premise active directory

BFF - как я понял задуман как разные наборы ручек API для разных клиентов вроде веб/мобилка- iOS/Android
У нас клиент один, это веб админка

Вопрос в том, как добавить параллельно поддержку ещё одной версии Azure API
То есть большая часть кода развертки одинакова, отличия будут в тех частях где ходим в апи

И какая-то диспетчеризиция - клиент удаляет старый десктоп в админке (создан через V1) - удаляем через V1
Создаёт новый десктоп и редактирует/удаляет - через V2

Это напоминает какую-то схему или проблему с well known решением?
Понимаю что пули нет, но ищу куда подглядеть :)
я бы написал свой ansible module который скрывает детали реализации v1/v2. если по API совпадают, то я бы сделал конвертор  v1 -> v2 (или v2 -> v1) чтобы минимизировать условия связаные с поддержкой двухх версий
источник

OB

Oleg Batashov in ctodailychat
Верно, из нюансов - у V2 может быть что-то такое чего нет у V1, и наоборот
Например в V2 убрали обязательную привязку к tenant (мета-сущность API, упрощённо группа десктопов и их юзеров), и само понятие tenant исчезло

--требует уточнения

У MS API позиционируются как несовместимые, то есть я пока смотрю на них так что нет ни v1->v2, ни v2->v1 по API и надо работать с каждым по отдельности

Сходство концептуальное и по моделям - да, большое
В детали ещё закопаюсь
источник

OB

Oleg Batashov in ctodailychat
Очень грубо говоря, у v1 и v2 вообще разные бэкенды с разными базами
То есть нет доступа из v2 к объектам v1 при всем желании
источник

OB

Oleg Batashov in ctodailychat
То есть челлендж как раз в параллельной поддержке двух версий
источник

A

Artur in ctodailychat
там может и ui админки разный будет?
источник

OB

Oleg Batashov in ctodailychat
Пока есть хоть один клиент, который работал с V1 - код вокруг V1 убрать нельзя
UI будет практически такой же, 80-90%
Оставшееся - новшества V2 only, возможно их можно и не делать пока
источник

OB

Oleg Batashov in ctodailychat
Yaroslav
BFF -> скрывает реализацию от клиентского приложения. Пусть он думает о том, какое API использовать
Спасибо Ярослав, про mashup почитаю
А чем это отличается от просто одного API, у которого внутри ручки решается в чье стороннее API дальше идти?
источник

Y

Yaroslav in ctodailychat
Oleg Batashov
Спасибо Ярослав, про mashup почитаю
А чем это отличается от просто одного API, у которого внутри ручки решается в чье стороннее API дальше идти?
это паттерн проектирования микросерверной архитектуры
источник

O

Oleg in ctodailychat
Интересует мнение чата, упоролись мы или нет) Мы мержим в мастер ветки как только прошел CI с автотестами и QA поставили аппрув. И у нас workflow построен так, что при выкате на стейджи мы всегда ветку патчим на свежий мастер, чтобы постоянно не подмерживать в нее свежий мастер, плюс, если есть конфликты оно сразу не выкатится и разработчик пойдет мержить и разбираться.
И вот мы переходим в k8s где образы вроде как уже заранее собраны на каждый коммит и думает как нам притащить туда наш workflow.
Пока есть идеи 2:
1) обновлять образы всех веток при каждом мерже в мастер
2) создать образ непосредственно перед каждым выкатом стейджа
источник

D

D0znpp in ctodailychat
можно плиз спросить как у вас? мы прямо серьезно обсуждаем внутри и хочется понять статистику
источник

O

Oleg in ctodailychat
нужен вариант - заплили удаленку после ковида)
источник

A

Artur in ctodailychat
мой голос украли
источник