Гадание правильного API по параметрам может быть утомительным и приведет к ненужным сложностям в вашей подсистеме маршрутизации. Гораздо понятнее, когда информация о версии четко указана в URL.
Теперь вопрос о том, следует ли придерживаться подхода 1 или 2, во многом зависит от вкуса. По моему мнению, это зависит от того, насколько ощутима версия вашего приложения для конечного пользователя. Если ваш конечный пользователь не воспринимает изменения во внешнем интерфейсе (т. Е. Если вы следуете архитектуре MVC, и это изменение относится только к уровню модели, а уровень представления остается неизменным, то подход 1 более рекомендуется. Где, как если бы он был Для пользователя важно знать, какую версию он использует или если пользовательский интерфейс, видимый для конечного пользователя, отличается в разных версиях, тогда подход 2 является лучшим вариантом, поскольку он помещает информацию о версии в видное место в URL.
Еще один способ взглянуть на это - задать вопрос, отличается ли состояние приложения между версиями. URL (без параметров запроса) представляет состояние приложения, и в случае, если ответ верен, следует придерживаться второго подхода. Однако, если информация о версии абстрагирована от основного кода приложения и относится только к некоторым абстрагированным подразделам, например. следует придерживаться только нескольких модельных классов, а затем подход 1.