Роутер отвечает за доставку данных к контроллеру/сервису.
Если нет пути - роутер обычно выдаёт 404 ошибку.
URI роутером делится на: протокол, домен, сервис и переменные сервиса
например:
domain.com/catalog/145 - сервис catalog отображает ветку с ID 145
роутер - перенаправляет лишь запрос по части URI: /catalog
сервис catalog - сам берёт нужные ему переменные из запроса.
Еще примеры:
domain.com/catalog/145/add - сервис catalog отображает диалог добавления новой категории в существующую категорию с ID 145.
domain.com/catalog/145/sort/price/09/col/1/2/title - сервис catalog отображает категорию с ID 145 с сортировкой по цене от наименьшей к большей и выводом колонок с ID:1, ID:2, и по названию столбца: title.
Также, router может быть древовидным и рекурсивным.
Пример:
domain.com/catalog/145/add/prod/24/56/37
Описание: Добавить в каталог с ID:145 товары с ID:24,56,37
Вначале, определяется, что категория с ID:145 существует и необходимо добавление, затем снова вызывается роутер с линком: /prod/24/56/37 и уже сервис prod проверяет существование продуктов и добавляет к каждому ID категорию 145 и так же возвращает результат в сервис catalog.
Шаблон страницы вывода - будет выбран согласно операции: add.
Таким образом, URI превращается в понятные предложения для общения пользователя/JS (front-end) с сервером через URI-запросы. Router - это как-бы механизм, "понимающий" то, что вы просите от веб-сайта через URI.
Суммарно: это
примитивный язык общения в виде структурированных лексических "предложений" между сайтом и пользователем/JS посредством URI-запросов.