Таким образом, операция GET изменяет состояние системы, выбирая новый объект. Я уверен, что я нарушаю принципы REST здесь, или есть веские основания для этого? Должен ли я просто изменить метод на POST?
Короткая версия: это хорошо.
Более длинная версия: REST говорит, что наши ресурсы имеют общую "унифицированную" семантику - значение сообщения не зависят от того, на какой ресурс вы ссылаетесь.
В случае HTTP основным дискриминатором для запросов является метод. Для метода GET семантика (в настоящее время) описывается RF C 7231. GET явно идентифицируется как safe
Методы запроса считается "безопасным", если их определенная семантика по существу доступна только для чтения; т. е. клиент не запрашивает и не ожидает никаких изменений состояния на исходном сервере в результате применения безопасного метода к целевому ресурсу.
Если вам, серверу, нужно измените кучу ваших частных хранилищ информации, чтобы вычислить текущее представление ресурса, это детали реализации, скрытые за фасадом HTTP. Вы можете делать то, что вам нравится.
Фундаментально, что безопасно означает , это то, что любой, кто знает идентификатор, может запросить текущее представление ресурса в любое время. Это позволяет браузеру повторять запросы, когда сеть нестабильна, или для пауков ползать вокруг индексации net, зная, что их запросы не причиняют вреда (или, точнее, что ошибка любого вреда, причиненного этими запросами, правильно назначена сервер).
Если все в порядке, то GET - совершенно "RESTful" метод, который можно использовать для этих запросов.