Я использую элементы пути, если отношение «чувствует» дерево / директорию (как в клубе есть игроки /clubs/berlin/players
). Параметры - это больше "тегов", я часто использую их для поисковых фильтров (например, защитники клуба 'berlin' с возрастом старше 22 * 1002 *).
Я разрабатываю структуру URL по значению домена. Самые основные понятия должны идти в корень. Если возможно, не углубляйтесь в структуру URL, я стараюсь не дублировать или создавать коллекции псевдонимов, которые представляют идентичные ресурсы (затраты на обслуживание в коде + документация удваиваются).
Вообще говоря / root, как корень, выглядит более естественно: /clubs/{club_id}/players
Я бы выставлял игроков только через /competitions/{comp_id}/clubs/{club_id}/players
, если набор игроков отличается от /clubs/{club_id}/players
, например во время соревнования
несколько игроков заблокированы или не попали в состав команды.
Что вы имеете в виду под /competitions
? Это турнир или одиночный матч? Если в одном матче с двумя клубами, возможно, используются домены + выездные домены: /competitions/{comp_id}/home-club
/competitions/{comp_id}/away-club
.
Обновление-1 Ответ
Вот мои мысли по поводу вашего обновления-вопроса:
Я думаю, /competitions/2/clubs
- это подмножество /clubs
, не каждый клуб участвует в каждом соревновании. Так что оба ресурса разные, так что два URL-адреса хороши.
Снова подумать /competitions/2/clubs/33/players/5
тоже должно быть хорошо (но важно, чтобы в сервере избегалось дублирование кода). Этот URL-адрес должен быть даже обязательным, если возвращаемый ресурс имеет подмножество /clubs/33/players
(например, игроки получили травмы или был достигнут предел размера команды для конкретного соревнования).