Как организовать доступ к ресурсам в REST API?
Перемудрили. Всё должно быть очень просто. Что такое тип медиа? Музыка или видео? Так по/movies/genre/{id}/film/{id} - фильмы
/music/albums/{id}/tracks/{id} - музыка
Далее. Если я знаю id трека или фильма мне надо дать возможность обратиться непосредственно к нему:music/track/{id} - всё
Если я не знаю какой трек мне нужен я прошу все треки из направления музыкального, например rap у него id=13music/style/13
По этому запросу выдаются пачки направления по 100, 300 или 1000 штук в зависимости от ресурсов и можно указать пагинаторmusic/style/13/2 - вторую страницу направлений мне покажите
Именно поэтому параметры лучше передавать в явном виде в url типа style=13&page=2 потому что так не запутаешься что такое 13 и что такое 2.
Если я совсем ничего не знаю и жанры тоже должен быть вспомогательный метод для получения всех жарнов, как у ВК для получения городов например. Запрос вида:music/allganre?page=0
отдаёт 100 пар вида "название жарнра -> id" так сделав 5 запросов с page=0/1/2/3/4 я в своём приложении смогу иметь всю базу возможных жанров. Можно сделать метод что бы получить жанр конкретной песни:music/getganre?track=1456
И т.п.music/getalbums/1456 - получить все альбомы исполнителя
music/detailalbum/1456 - получить все данные об альбоме (год выпуска и т.п.)
music/tracksalbum/1456 - получить список треков конкретного альбома
В общем идите не от частного к общему а наоборот, представьте с чего начать работу человеку который ничего не знает. Максимальную атомарность запросов введите что бы они были между собой никак не связаны. И человек сначала получит жарны, по жанру список исполнителей, по нему список альбомов, по нему список песен, по нему данные о нужной песне. И это всё отдельные запросы.
Как-то непонятно: обычно методы (аналоги: create, set, get,update, delete и т.д.) выносятся (монтируются) на точки входа клиентских запросов (endpoint).
Все передаваемые методу параметры - это уже POST JSON (в большинстве случаев).
Бывают и исключения, когда методы простые и параметры идут в адресе endpoint, но тогда адрес должен возвращать БЕЗ редиректов и сервер должен корректно "понимать" этот запрос, т.к. фактически это уже поисковый запрос, не имеющий отношения к RESTful.напр. пользователю понравился музыкальный трек, он переходит по ссылке /media/{track_id}, а его редиректит на /music-groups/{mg_id}/albums/{a_id}/tracks/{track_id}Адрес не меняем (без редиректа!), но можем вернуть в ответе расширенную информацию о треке, группе, альбоме в виде структуры (массив или дерево).