|
Управление версиями 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 |
|
|
start [/forum/topic.php?fid=18&msg=39687984&tid=1355158]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
125ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 228ms |
0 / 0 |