|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
В интернете по поводу управления версиями апи в основном предлагается подход, при котором в одном проекте сосуществуют контроллеры из нескольких версий. Т.е. например HelloWorldControllerV1 и HelloWorldControllerV2. И апи будет переключаться между ними в зависимости от того, хэдер с запросом на какую версию пришел. Т.е. по-сути каша из контроллеров разных версий. Хотелось-бы все-же иметь один проект, но с управлением версиями (в хэдерах). Можно-ли этого как-то достичь? Т.е. к примеру стоит у клиента версия v1, там есть путь /myservice/helloworld. Разработали новую v2 версию, и клиент теперь может по тому-же пути /myservice/helloworld получить либо первую версию либо вторую в зависимости от того, что запросил в хэдере? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 13:18 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Lessypклиент теперь может по тому-же путину а зачем тебе идти против всех? Посмотри как гугл карты или яндекс карты или soap делают. Все вроде делают www.aaa/api/v1/...... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 13:42 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Petro123www.aaa/api/v1/По идее, если клиент передает свою версию в заголовках, а адреса в клиенте менять не хочется, то можно наверное сделать миддлваре, которое будет добавлять версию в строку адреса. Ну и атрибут контроллера поправить [Route("api/v1/MyController")] ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 14:00 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Shocker.Pro, Наверно. Просто никто так почему то не усложняет. В конвейре запросов вообще можно переписать весь урл, но наверно Оверхедом считается. Больше потеряем чем приобретем. Удачи аффтару! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:26 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Lessyp, Нужен диспетчер, промежуточная точка, которая в ответ на запрос (я такая-та программа версии XXX, знакомая с АПИ версии YYY) будет выдавать подходящий API (url). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:45 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
LessypРазработали новую v2 версию, и клиент теперь может по тому-же пути /myservice/helloworld получить либо первую версию либо вторую в зависимости от того, что запросил в хэдере? Совершенно точно так делать не нужно. Это нарушение концепции HTTP, что ни приведёт ни к чему хорошему. У каждой версии API должен быть отдельный URL. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 15:47 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Можно реализовать CustomControllerResover, который в процессе будет поставлять нужную версию. При таком подходе можно обработать любую ситуацию: и header, и cookie, и language, и role пользователя .... да всё что хочешь! И версию какую хочешь подсунуть на какой хочешь URL. Но лучше чтобы у каждой версии был свой URL... тебе правильно подсказали. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2018, 18:06 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Lessyp, берём книжку "Building APIs You Won't Hate" и читаем главу "API Versioning", там описано 6 подходов ну или просто гуглим "API Versioning" изобретать велосипед-то зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 09:48 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
LessypТ.е. к примеру стоит у клиента версия v1, там есть путь /myservice/helloworld. Разработали новую v2 версию, и клиент теперь может по тому-же пути /myservice/helloworld получить либо первую версию либо вторую в зависимости от того, что запросил в хэдере? Можно, этот подход называется Custom Request Header ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 10:03 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
skyANAМожно, этот подход называется Custom Request Header Таки лично я не советовал бы его использовать. Сложно настраивать и управлять. Практически не работает, когда API меняется путём композиции/декомпозиции методов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 10:18 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
hVostt, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 10:23 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
hVosttskyANAМожно, этот подход называется Custom Request Header Таки лично я не советовал бы его использовать. Сложно настраивать и управлять. Практически не работает, когда API меняется путём композиции/декомпозиции методов. По этому я и предлагаю почитать соответсвующую литературу и статьи для начала. Всё уже сравнили до нас. И выбрать более подходящий вариант для своей ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 10:37 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Также автору подходит вариант Body and Query Params. Используется в Netflix, Google Data, PayPal, Amazon SQS. А Custom Request Header подход используется, кстати, в Azure ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 10:45 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
А мы используем передачу номера версии через URI: https://gethelp.wildapricot.com/en/articles/182#version ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 10:46 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
передача версии в урл самое имхо удобнее и очевидное то что ТС можно сделать без проблем, но надо идти по простому и очевидному новое апи часто меняет методы, а не просто внутри переписывает и другое дто возвращает ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 11:22 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
handmadeFromRuпередача версии в урл самое имхо удобнее и очевидное Это самое общепринятое Со своими минусами: - технически это не RESTful - от клиента требуются определённые усилия по поддержке актуальности линков А ТС как раз таки хочет, чтобы клиент не заморачивался с последними. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 11:33 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
handmadeFromRuновое апи часто меняет методы, а не просто внутри переписывает и другое дто возвращает А это тут при чём? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 11:34 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
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 Используем полученный префикс для вызова АПИ. Решает не только задачи версионности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 11:52 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
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 Используем полученный префикс для вызова АПИ. Решает не только задачи версионности. Можно. Но это потребует переписывания приложений, что уже сейчас пользуются сервисами, что стоят у клиентов ТСа. Или ты думаешь, что проект только начинается? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 11:57 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
skyANAМожно. Но это потребует переписывания приложений, что уже сейчас пользуются сервисами, что стоят у клиентов ТСа. Или ты думаешь, что проект только начинается? Ну я в общем говорю :) Для не публичного АПИ не вижу особенного смысла в версионности. Хотя, если её заложить на базе URI, это могло бы принести пользу в различных ситуациях. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 12:05 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
hVosttСовершенно точно так делать не нужно. Это нарушение концепции HTTP, что ни приведёт ни к чему хорошему. У каждой версии API должен быть отдельный URL. нарушение концепции HTTP как раз вложение версий в урлы. Хотя это самый простой для разработки метод, но и самый неудобный для клиентов так как им придется переписывать конфиги с выпуском каждой новой версии Еще вопрос, у кого-нибудь есть практический опыт реализации версионности "стандартным" методом, когда в одном проекте сосуществуют множество версий контроллеров? Именно такой подход настойчиво советует Майкрософт, но на первый взгляд он кажется крайне неудобным, кто-нибудь делал такие проекты, какие там подводные камни лежат на практике? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 13:53 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
handmadeFromRuто что ТС можно сделать без проблем, но надо идти по простому и очевидному новое апи часто меняет методы, а не просто внутри переписывает и другое дто возвращает те методы что не изменились все равно оказываются с другим адресом в новой версии. Так наказывать своих клиентов не выглядит привлекательно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 13:55 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
LessypЕще вопрос, у кого-нибудь есть практический опыт реализации версионности "стандартным" методом, когда в одном проекте сосуществуют множество версий контроллеров? Именно такой подход настойчиво советует Майкрософт, но на первый взгляд он кажется крайне неудобным, кто-нибудь делал такие проекты, какие там подводные камни лежат на практике? А дайте ссылку на рекомендацию, если не сложно. Для меня это звучит как бред какой-то. Выпускается новая версия, ставится на отдельные сервера, старая крутится на старых. Клиенты постепенно переползают на новую. В итоге старая гасится. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:01 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Lessyp, может Вы поясните нам, а что Вы вообще понимаете под новой/старой версией? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:02 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:12 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
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 - это что-ли? Дак это про то, что на сервере должно быть развёрнуто несколько версий приложения, пока клиенты пользуются и старыми и новыми версиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:17 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Походу топик родился из-за трудностей перевода ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:20 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
skyANAИ где Вы тут увидели про множество версий контроллеров? the server has to support a number of different versions - это что-ли? Дак это про то, что на сервере должно быть развёрнуто несколько версий приложения, пока клиенты пользуются и старыми и новыми версиями. там описание принципов, реализация тут: https://github.com/Microsoft/aspnet-api-versioning/wiki/How-to-Version-Your-Service ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:27 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Lessypнарушение концепции HTTP как раз вложение версий в урлы.давайте от логики идти, а не от контроллеров. Принцип http в том что один и тот же урл указывает на один и тот же ресурс. Это программист выдумывает, что 5 методов API и 4 метода API это одно и тоже. www.sql.ru/api/v2/add-member Последнее слово это имя метода. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 14:41 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
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 ." Вы хотите разнести реализацию по разным типам? Зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 15:07 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Потому-что так там написано. В общем как я понимаю опыта в реализации даного подхода у вас нет. Интересует мнение тех, у кого он есть ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 15:11 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
LessypПотому-что так там написано. В общем как я понимаю опыта в реализации даного подхода у вас нет. Интересует мнение тех, у кого он есть Данного нет. У нас иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 15:12 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
skyANAhandmadeFromRuпередача версии в урл самое имхо удобнее и очевидное Это самое общепринятое Со своими минусами: - технически это не RESTful - от клиента требуются определённые усилия по поддержке актуальности линков А ТС как раз таки хочет, чтобы клиент не заморачивался с последними. 1. почему технически эт не рест? 2. что значит не заморачивался если один фиг надо будет читать доку новой версии апи и также адаптировать код..имхо однохерственно для клиента Lessypте методы что не изменились все равно оказываются с другим адресом в новой версии. Так наказывать своих клиентов не выглядит привлекательно что значит наказывать если в любом случае надо адаптировать код клиента ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 15:59 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Lessypнарушение концепции HTTP как раз вложение версий в урлы. Нет, не согласен. /api/v1/users /api/v2/users Это разные ресурсы, так как принимают и отдают разные наборы данных. Я имею абсоютные гарантии, что любой клиент получит по ссылке /api/v1/users одно и то же. Если в этом будет участвовать какая-то подкапотная магия, то таких гарантий нет. Да и фиг его знает, не зарежет или не искорёжит ли заголовки какой-нибудь прокси. Не достаточно знать, по какому URL обращается клиент, чтобы гарантировано знать, что он должен получит, нужна ещё какая-то подкапотная шелупонь. LessypХотя это самый простой для разработки метод, но и самый неудобный для клиентов так как им придется переписывать конфиги с выпуском каждой новой версии Я не понимаю, почему это клиенты должны броситься переписывать свои конфиги. Смена версии означает смену контрактов. Им всё придётся переписывать, а не конфиги. Или вы не правильно понимаете концепцию версии АПИ. LessypЕще вопрос, у кого-нибудь есть практический опыт реализации версионности "стандартным" методом, когда в одном проекте сосуществуют множество версий контроллеров? При чём тут версии контроллеров?... Хотя должно быть, нет пока понимания, что вообще такое "версия АПИ". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 17:31 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
Ну и кеширование конечно... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2018, 17:34 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
handmadeFromRuчто значит наказывать если в любом случае надо адаптировать код клиента ну не в любом случае, плюс конфиги обычно не меняются, клиентам надо не забыть их обновить, да еще с правильной версией ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 08:27 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
hVosttНет, не согласен. ну а вот теоретики API зато согласны. Но меня больше интересует не идеологическая выдержанность, а практическая сторона вопроса ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 08:30 |
|
Управление версиями Web API
|
|||
---|---|---|---|
#18+
LessyphVosttНет, не согласен. ну а вот теоретики API зато согласны. Но меня больше интересует не идеологическая выдержанность, а практическая сторона вопроса Ну и к чему тогда спорить? Мнения высказаны, выбирайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2018, 10:11 |
|
|
start [/forum/topic.php?all=1&fid=18&tid=1355158]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 258ms |
total: | 409ms |
0 / 0 |