Короткий ответ : сделать непересекающимися шаблонами.
Проблема заключается в том, что ваши шаблоны перекрываются. Действительно, если URL-адрес /api/user/signin/
, а /api/user/<str:user_uniq_id>/
- это первый шаблон в вашем списке URL-адресов, он будет соответствовать этому шаблону. Действительно, поскольку <str:user_uniq_id>
может быть просто объединен с signin
. Тот факт, что позже в списке есть и другой URL-адрес, который также совпадает, не имеет значения.
Поэтому вы должны проектировать непересекающиеся шаблоны. Таким образом, это означает, что ни один URL-адрес, который может быть создан одним шаблоном, не может быть создан другим шаблоном.
Например, вы можете создать свои URL-адреса следующим образом:
/api/user<b>/details</b>/<str:user_uniq_id>/
/api/user/signin/
/api/user/registration/
/api/user/invitation/edit/
/api/user/invitation<b>/details</b>/<str:uniq_id>/
Используя, таким образом, /details
, URL /api/user/sigin
не может совпадать с первым шаблоном, так как он должен содержать /api/user/details
в качестве префикса.
В качестве альтернативы, вы можете поставить путь /api/user/signin
первым в списке пути. Но это не выглядит хорошей идеей для меня. Если позже у пользователя будет просто uniq_id
просто 'signin'
(да, это может выглядеть редко, но в конечном итоге это может произойти), то этот пользователь не сможет увидеть свою страницу "подробностей".