powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Управление версиями Web API
39 сообщений из 39, показаны все 2 страниц
Управление версиями Web API
    #39687442
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В интернете по поводу управления версиями апи в основном предлагается подход, при котором в одном проекте сосуществуют контроллеры из нескольких версий. Т.е. например HelloWorldControllerV1 и HelloWorldControllerV2. И апи будет переключаться между ними в зависимости от того, хэдер с запросом на какую версию пришел. Т.е. по-сути каша из контроллеров разных версий.
Хотелось-бы все-же иметь один проект, но с управлением версиями (в хэдерах). Можно-ли этого как-то достичь? Т.е. к примеру стоит у клиента версия v1, там есть путь /myservice/helloworld. Разработали новую v2 версию, и клиент теперь может по тому-же пути /myservice/helloworld получить либо первую версию либо вторую в зависимости от того, что запросил в хэдере?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687455
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypклиент теперь может по тому-же путину а зачем тебе идти против всех?
Посмотри как гугл карты или яндекс карты или soap делают.
Все вроде делают
www.aaa/api/v1/......
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687475
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123www.aaa/api/v1/По идее, если клиент передает свою версию в заголовках, а адреса в клиенте менять не хочется, то можно наверное сделать миддлваре, которое будет добавлять версию в строку адреса. Ну и атрибут контроллера поправить [Route("api/v1/MyController")]
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687548
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Наверно.
Просто никто так почему то не усложняет.
В конвейре запросов вообще можно переписать весь урл, но наверно
Оверхедом считается. Больше потеряем чем приобретем.
Удачи аффтару!
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687566
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

Нужен диспетчер, промежуточная точка, которая в ответ на запрос (я такая-та программа версии XXX, знакомая с АПИ версии YYY) будет выдавать подходящий API (url).
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687570
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypРазработали новую v2 версию, и клиент теперь может по тому-же пути /myservice/helloworld получить либо первую версию либо вторую в зависимости от того, что запросил в хэдере?

Совершенно точно так делать не нужно. Это нарушение концепции HTTP, что ни приведёт ни к чему хорошему. У каждой версии API должен быть отдельный URL.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687690
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно реализовать CustomControllerResover, который в процессе будет поставлять нужную версию. При таком подходе можно обработать любую ситуацию: и header, и cookie, и language, и role пользователя .... да всё что хочешь! И версию какую хочешь подсунуть на какой хочешь URL. Но лучше чтобы у каждой версии был свой URL... тебе правильно подсказали.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687862
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

берём книжку "Building APIs You Won't Hate" и читаем главу "API Versioning", там описано 6 подходов
ну или просто гуглим "API Versioning"

изобретать велосипед-то зачем?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687867
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687878
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypТ.е. к примеру стоит у клиента версия v1, там есть путь /myservice/helloworld. Разработали новую v2 версию, и клиент теперь может по тому-же пути /myservice/helloworld получить либо первую версию либо вторую в зависимости от того, что запросил в хэдере?
Можно, этот подход называется Custom Request Header
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687886
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМожно, этот подход называется Custom Request Header

Таки лично я не советовал бы его использовать. Сложно настраивать и управлять. Практически не работает, когда API меняется путём композиции/декомпозиции методов.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687891
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
+1
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687898
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAМожно, этот подход называется Custom Request Header

Таки лично я не советовал бы его использовать. Сложно настраивать и управлять. Практически не работает, когда API меняется путём композиции/декомпозиции методов.
По этому я и предлагаю почитать соответсвующую литературу и статьи для начала.
Всё уже сравнили до нас.

И выбрать более подходящий вариант для своей ситуации.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687903
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также автору подходит вариант Body and Query Params. Используется в Netflix, Google Data, PayPal, Amazon SQS.

А Custom Request Header подход используется, кстати, в Azure
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687905
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мы используем передачу номера версии через URI:
https://gethelp.wildapricot.com/en/articles/182#version
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687934
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
передача версии в урл самое имхо удобнее и очевидное

то что ТС можно сделать без проблем, но надо идти по простому и очевидному
новое апи часто меняет методы, а не просто внутри переписывает и другое дто возвращает
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687948
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuпередача версии в урл самое имхо удобнее и очевидное
Это самое общепринятое Со своими минусами:
- технически это не RESTful
- от клиента требуются определённые усилия по поддержке актуальности линков

А ТС как раз таки хочет, чтобы клиент не заморачивался с последними.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687950
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuновое апи часто меняет методы, а не просто внутри переписывает и другое дто возвращает
А это тут при чём?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687970
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА ТС как раз таки хочет, чтобы клиент не заморачивался с последними.

Для этого, как я уже сказал, можно сделать единственную точку (turn server), отвечающую какой API использовать клиенту.

GET: /turn/getapi?app=MyApp&ver=1.11&api=some-api&known-ver=1.0
RESPONSE: https://domain.com/some/api/v1.1

Используем полученный префикс для вызова АПИ. Решает не только задачи версионности.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687975
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAА ТС как раз таки хочет, чтобы клиент не заморачивался с последними.

Для этого, как я уже сказал, можно сделать единственную точку (turn server), отвечающую какой API использовать клиенту.

GET: /turn/getapi?app=MyApp&ver=1.11&api=some-api&known-ver=1.0
RESPONSE: https://domain.com/some/api/v1.1

Используем полученный префикс для вызова АПИ. Решает не только задачи версионности.
Можно. Но это потребует переписывания приложений, что уже сейчас пользуются сервисами, что стоят у клиентов ТСа.

Или ты думаешь, что проект только начинается?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39687984
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМожно. Но это потребует переписывания приложений, что уже сейчас пользуются сервисами, что стоят у клиентов ТСа.

Или ты думаешь, что проект только начинается?

Ну я в общем говорю :)

Для не публичного АПИ не вижу особенного смысла в версионности.
Хотя, если её заложить на базе URI, это могло бы принести пользу в различных ситуациях.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688102
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСовершенно точно так делать не нужно. Это нарушение концепции HTTP, что ни приведёт ни к чему хорошему. У каждой версии API должен быть отдельный URL.
нарушение концепции HTTP как раз вложение версий в урлы. Хотя это самый простой для разработки метод, но и самый неудобный для клиентов так как им придется переписывать конфиги с выпуском каждой новой версии
Еще вопрос, у кого-нибудь есть практический опыт реализации версионности "стандартным" методом, когда в одном проекте сосуществуют множество версий контроллеров? Именно такой подход настойчиво советует Майкрософт, но на первый взгляд он кажется крайне неудобным, кто-нибудь делал такие проекты, какие там подводные камни лежат на практике?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688104
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuто что ТС можно сделать без проблем, но надо идти по простому и очевидному
новое апи часто меняет методы, а не просто внутри переписывает и другое дто возвращает
те методы что не изменились все равно оказываются с другим адресом в новой версии. Так наказывать своих клиентов не выглядит привлекательно
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688108
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypЕще вопрос, у кого-нибудь есть практический опыт реализации версионности "стандартным" методом, когда в одном проекте сосуществуют множество версий контроллеров? Именно такой подход настойчиво советует Майкрософт, но на первый взгляд он кажется крайне неудобным, кто-нибудь делал такие проекты, какие там подводные камни лежат на практике?
А дайте ссылку на рекомендацию, если не сложно. Для меня это звучит как бред какой-то.

Выпускается новая версия, ставится на отдельные сервера, старая крутится на старых.
Клиенты постепенно переползают на новую. В итоге старая гасится.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688109
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessyp,

может Вы поясните нам, а что Вы вообще понимаете под новой/старой версией?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688118
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА дайте ссылку на рекомендацию, если не сложно. Для меня это звучит как бред какой-то.

Выпускается новая версия, ставится на отдельные сервера, старая крутится на старых.
Клиенты постепенно переползают на новую. В итоге старая гасится.

https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design URI versioning

This versioning mechanism is very simple but depends on the server routing the request to the appropriate endpoint. However, it can become unwieldy as the web API matures through several iterations and the server has to support a number of different versions. Also, from a purist’s point of view, in all cases the client applications are fetching the same data (customer 3), so the URI should not really be different depending on the version. This scheme also complicates implementation of HATEOAS as all links will need to include the version number in their URIs.
...
Media type versioning

This approach is arguably the purest of the versioning mechanisms and lends itself naturally to HATEOAS, which can include the MIME type of related data in resource links.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688121
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypskyANAА дайте ссылку на рекомендацию, если не сложно. Для меня это звучит как бред какой-то.

Выпускается новая версия, ставится на отдельные сервера, старая крутится на старых.
Клиенты постепенно переползают на новую. В итоге старая гасится.

https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design URI versioning

This versioning mechanism is very simple but depends on the server routing the request to the appropriate endpoint. However, it can become unwieldy as the web API matures through several iterations and the server has to support a number of different versions. Also, from a purist’s point of view, in all cases the client applications are fetching the same data (customer 3), so the URI should not really be different depending on the version. This scheme also complicates implementation of HATEOAS as all links will need to include the version number in their URIs.
...
Media type versioning

This approach is arguably the purest of the versioning mechanisms and lends itself naturally to HATEOAS, which can include the MIME type of related data in resource links.

И где Вы тут увидели про множество версий контроллеров?

the server has to support a number of different versions - это что-ли?

Дак это про то, что на сервере должно быть развёрнуто несколько версий приложения, пока клиенты пользуются и старыми и новыми версиями.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688128
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Походу топик родился из-за трудностей перевода
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688137
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ где Вы тут увидели про множество версий контроллеров?

the server has to support a number of different versions - это что-ли?

Дак это про то, что на сервере должно быть развёрнуто несколько версий приложения, пока клиенты пользуются и старыми и новыми версиями.
там описание принципов, реализация тут:

https://github.com/Microsoft/aspnet-api-versioning/wiki/How-to-Version-Your-Service
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688151
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypнарушение концепции HTTP как раз вложение версий в урлы.давайте от логики идти, а не от контроллеров.
Принцип http в том что один и тот же урл указывает на один и тот же ресурс.
Это программист выдумывает, что 5 методов API и 4 метода API это одно и тоже.
www.sql.ru/api/v2/add-member
Последнее слово это имя метода.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688192
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypskyANAИ где Вы тут увидели про множество версий контроллеров?

the server has to support a number of different versions - это что-ли?

Дак это про то, что на сервере должно быть развёрнуто несколько версий приложения, пока клиенты пользуются и старыми и новыми версиями.
там описание принципов, реализация тут:

https://github.com/Microsoft/aspnet-api-versioning/wiki/How-to-Version-Your-Service
Принципов чего?

Там написано: "Unfortunately, this causes an issue for service API versioning if you want split the implementation across different types ."

Вы хотите разнести реализацию по разным типам? Зачем?
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688198
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому-что так там написано. В общем как я понимаю опыта в реализации даного подхода у вас нет. Интересует мнение тех, у кого он есть
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688200
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessypПотому-что так там написано. В общем как я понимаю опыта в реализации даного подхода у вас нет. Интересует мнение тех, у кого он есть
Данного нет. У нас иначе.
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688240
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhandmadeFromRuпередача версии в урл самое имхо удобнее и очевидное
Это самое общепринятое Со своими минусами:
- технически это не RESTful
- от клиента требуются определённые усилия по поддержке актуальности линков

А ТС как раз таки хочет, чтобы клиент не заморачивался с последними.

1. почему технически эт не рест?
2. что значит не заморачивался если один фиг надо будет читать доку новой версии апи и также адаптировать код..имхо однохерственно для клиента


Lessypте методы что не изменились все равно оказываются с другим адресом в новой версии. Так наказывать своих клиентов не выглядит привлекательно
что значит наказывать если в любом случае надо адаптировать код клиента
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688305
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lessypнарушение концепции HTTP как раз вложение версий в урлы.

Нет, не согласен.

/api/v1/users
/api/v2/users

Это разные ресурсы, так как принимают и отдают разные наборы данных. Я имею абсоютные гарантии, что любой клиент получит по ссылке /api/v1/users одно и то же.

Если в этом будет участвовать какая-то подкапотная магия, то таких гарантий нет.
Да и фиг его знает, не зарежет или не искорёжит ли заголовки какой-нибудь прокси.
Не достаточно знать, по какому URL обращается клиент, чтобы гарантировано знать, что он должен получит, нужна ещё какая-то подкапотная шелупонь.


LessypХотя это самый простой для разработки метод, но и самый неудобный для клиентов так как им придется переписывать конфиги с выпуском каждой новой версии

Я не понимаю, почему это клиенты должны броситься переписывать свои конфиги. Смена версии означает смену контрактов. Им всё придётся переписывать, а не конфиги. Или вы не правильно понимаете концепцию версии АПИ.


LessypЕще вопрос, у кого-нибудь есть практический опыт реализации версионности "стандартным" методом, когда в одном проекте сосуществуют множество версий контроллеров?

При чём тут версии контроллеров?... Хотя должно быть, нет пока понимания, что вообще такое "версия АПИ".
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688307
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и кеширование конечно...
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688496
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuчто значит наказывать если в любом случае надо адаптировать код клиента
ну не в любом случае, плюс конфиги обычно не меняются, клиентам надо не забыть их обновить, да еще с правильной версией
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688499
Lessyp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНет, не согласен.

ну а вот теоретики API зато согласны. Но меня больше интересует не идеологическая выдержанность, а практическая сторона вопроса
...
Рейтинг: 0 / 0
Управление версиями Web API
    #39688572
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LessyphVosttНет, не согласен.

ну а вот теоретики API зато согласны. Но меня больше интересует не идеологическая выдержанность, а практическая сторона вопроса

Ну и к чему тогда спорить? Мнения высказаны, выбирайте.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Управление версиями Web API
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]