2014-12-12 3 views
0

Я строю REST API, у меня есть ресурс сказать фильмы.REST API вызов для фильтрации ресурса

1) POST : movies/ 

2). GET : movies/{movie_id} 

звонок 1) создает сообщение.

вызов 2) когда предоставлен файл movie_id, он возвращает данные конкретного фильма, в противном случае возвращает все фильмы.

Теперь я должен отфильтровать фильмы на основе фильма атрибуты, как популярный, рейтинг и т.д.

Моих сомнений является:

Должен ли быть отдельным URL для фильтрации фильмов что-то вроде

GET: movies/filter/ 

Этот вызов будет иметь параметры GET, такие как popuplar, рейтинг и т. Д. И на основе этих параметров фильмы могут быть отфильтрованы.

Не уверен, что это стандартный способ справиться с этим делом, пожалуйста, поделитесь своими мыслями об этом,

+0

Кажется приятным способом, так как это четко определяет, что должен делать каждый запрос. –

+0

Да, параметры запроса должны быть хорошим способом – Ironluca

ответ

1

Я видел два основных подхода в данном случае. Один из них вы предложили, чтобы использовать отдельный 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 из путь. Но другим это может понравиться.