У меня правда для java.
routes = new ArrayList<RouteData>();
routes.add(new RouteData("GET", "home/index/{^[0-9]{1,15}$}/valid/{^[A-z]{3,15}$}"));
routes.add(new RouteData("POST", "home/index/{^[0-9]{1,15}$}/valid/{^[A-z]{3,15}$}"));
Я в своё время решил параметры держать в {} скобках, так парсер знает что это параметр + можно регулярку туда засунуть, чтоб роутинг чётко совпадал. Плюс держа в скобках, вы можете делать роутинг не по паттерну
Controller/Action/id
А что-нибуть более гибкое(особенно с регулярками описывающие парраметр)
Controller/Action/{id}
Controller/{id}/Action
Controller/Action/{name}/delete/{id}
Плюс в моём примере метод запроса (POST, GET DELETE...) тоже имеет значение.
Парсер роутера, разбирает пришедший запрос и ищет есть ли такой роутинг у нас, при первом же совпадение, например
Question/Read/{name}/{id}
+ метод запроса тоже должен совпадать.
Запустится Controller = Question, Action = Read с параметрами name, id
Конечно с помощью reflection проверяется есть ли такой контроллер и action метод с такими параметрами если нет — 404
Вообщем как то так, трудно описать, если что спрашивайте. Но думаю принцип понятен.
Восновном это делалось чтоб в роутинг можно было засовывать разный мусор, не влияющий на запрос и не являющейся парраметром, но который должен присутсвовать.
Http Method Delete:
User/Profile/{name}/delete/{id}
параметр delete в url не играет никакой роли, он просто для удобства и понимания что делает URL.