Правильный способ справиться с этим - иметь такие URL-адреса:
domain.com/user/id/1 -> user::getById
domain.com/user/email/foo@bar.com -> user::getByEmail
domain.com/user/username/foo -> user::getByUsername
Однако указание нескольких «параметров» больше похоже на поиск, я бы не стал использовать ресурсы для этого, потому что путь должен быть абсолютным. Что означает:
domain.com/user/name/Kossel/likes/StackOverflow
И
domain.com/user/likes/StackOverflow/name/Kossel
Не тот же ресурс. Вместо этого я бы сделал:
domain.com/user/?name=Kossel&likes=StackOverflow
Вот что использует переполнение стека:
stackoverflow.com/questions/tagged/php
stackoverflow.com/tags/php/new
stackoverflow.com/questions/tagged/mysql?sort=featured