Я видел два основных подхода в данном случае. Один из них вы предложили, чтобы использовать отдельный URL-адрес movies/filter/
и отфильтровать их. Классический пример: cars/colors/red/maker/porsche
.
Другое - использовать параметры запроса, который по возможности является моим предпочтительным подходом.
GET /movies?year=2010&actor=Carrey
Вариантов могут включать в себя кратные каждом (URL закодированного соответствующим образом, конечно)
GET /movies?year=[2010,2011]&actor=Carrey
Мне нравится этот подход, поскольку он четко говорит, «получить список фильмов, но ограничение по этим свойствам» ,
Два варианта, которые я видел и иногда использовал, когда это необходимо, - это попытки выделить фактические условия поиска в параметрах запроса из других представлений. Обычно они возникают, когда вам нужно использовать параметры запроса для других вещей, кроме поиска.
Первый представляет собой гибрид, который говорит, «только поиск, и рассматривать параметры запроса в качестве поисковых терминов, в частности, к югу от пути Так что-то вроде:.
GET /movies/filter?year=2010&actor=Carrey
Или, если вы предпочитаете
GET /movies/search?year=2010&actor=Carrey
вариантом является флагом любые условия поиска
GET /movies?search.year=2010&search.actor=Carrey
Наконец, вариант я не как много должен иметь /search
тракту
GET /search/movies?year=2010&actor=Carrey
Это иногда необходимо, но мне это не нравится, потому что search
является действие, не ресурс, и, таким образом, не очень RESTful из путь. Но другим это может понравиться.
Кажется приятным способом, так как это четко определяет, что должен делать каждый запрос. –
Да, параметры запроса должны быть хорошим способом – Ironluca