Я просмотрел Рекомендации по управлению версиями API?, но я не совсем уверен в ответе, поэтому я снова задаюсь вопросом о версии с более конкретным пример. У меня есть два URI (один с версией как часть URI и один без):
http://xxxx/v1/user/123 -> favored solution in discussed thread
http://xxxx/user/123
У меня возникают сомнения в том, что первая ссылка выражает идею REST. Я нахожу http://xxxx/v1/user/123
запутанным, так как это говорит о том, что когда-нибудь будет более высокая версия api, например http://xxxx/v2/user/123
. Но это не имеет смысла в терминах REST, сама версия api - HTTP 1.0 или 1.1, которая уже отправлена внутри HTTP-запроса. Этот ориентированный на ресурсы ресурс REST сильно отличается от других api-интерфейсов, таких как SOAP или Java-интерфейсы (где обычно имеют api-версии в квалифицированных именах).
В REST единственное, что имеет смысл в версии, - это представление этого ресурса (например, новые поля добавляются или удаляются). Это управление версиями относится к части согласования контента, например:
http://xxx/user/123 + HTTP 'Accept' Header -> Content negotation through header
http://xxx/user/123?v=1 -> for perma-links/hyperlinks
Можно также утверждать, что такое согласование содержимого версии может быть частью URI внутри пути, но я нахожу его интуитивно понятным, потому что вы могли бы получить различные URI для одного и того же ресурса и должны поддерживать перенаправления на некоторая точка.
Подводя итог: в URI REST нет api-версий, только версия представления ресурсов. Представленная версия-информация относится к контенту-согласованию (в качестве запросаParam или HTTP "Accept" ).
Как вы думаете? В каких вещах вы не согласны/согласны?