REST service URI design - PullRequest
       2

REST service URI design

1 голос
/ 25 января 2011

Я создаю службу RESTful, которая должна возвращать коллекцию элементов, но также должна иметь возможность фильтрации по нескольким индексам (местоположение, компания и категория). Эти фильтры могут применяться по отдельности или в любой комбинации. Это ситуация, когда использование фильтров, применяемых в строке запроса, имеет смысл? (что-то вроде: /items?company={}&location={}&category={}) Есть ли лучший способ передать фильтры ресурсу?

Ответы [ 4 ]

2 голосов
/ 25 января 2011

Предпочтительным способом передачи параметров поиска является использование строки запроса (действительно, именно поэтому она называется строкой запроса).Путь идентифицирует определенный ресурс, который вы хотите (индекс элементов).Строка запроса может включать, например, условия фильтрации, которые используются для изменения представления ресурса, но это все тот же ресурс (индекс элементов), поэтому путь должен быть таким же.

1 голос
/ 25 января 2011

Это предпочтительный способ в среде REST.Вы могли бы переменные POST с фильтром, но это нарушило бы принципы REST (адрес должен представлять ресурс).

Рассматривали ли вы использование Службы данных WCF ?Это делает многое для вас "из коробки" в соответствии со стандартами.

0 голосов
/ 25 января 2011

Одно простое правило будет охватывать большинство, если не все хорошие практики;

If your filter parameters are optional then they should go to query string, 
if some filters are mandatory you may wanna put them into path. 
Adding optional params to path is not a good idea.
0 голосов
/ 25 января 2011

В вашей таблице маршрутов вы можете сделать что-то вроде этого:

"items/company/{organizationId?}/{locationId?}/{category?}"

и ваш контроллер будет выглядеть следующим образом:

public virtual ActionResult Get(string organizationId, string locationId, string category) {
...
}

На мой взгляд, это лучше, чем строки запросов, так как его гораздо легче обнаружить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...