RESTful URL design - как запросить использование OR между параметрами

Как бы вы создали запрос RESTful для поддержки OR операндов между параметрами. Пусть говорят, что у моего ресурса есть два поля field1 и field2. Как бы вы создали URL-адрес, чтобы включить следующий запрос:

"Получите myresources, где field1 = x OR field2 = y"

Проектирование запросов в REST довольно прямолинейно, но я видел только запросы, которые поддерживают AND между полями запроса. например /Myresource поле1 = х &? Поле2 = у

Возможным решением может быть предоставление одного параметра запроса со свободным текстом, где часть, например:

GET/myresource? q = {field1 = x OR field2 = y}

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

Что вы предлагаете?

Ответ 1

Параметры запроса не по определению И связаны, они просто инертные параметры - как вы справляетесь с ними, зависит от вас. Для поиска OR я бы предложил:

GET /myresources?field1=x&field2=y&inclusive=true

Если вы хотите по умолчанию использовать отношение AND (разумное), и любое другое расширение, которое вы хотите, конечно, возможно.

Ответ 2

Для чего стоит, SO использует следующий формат для поиска вопросов с несколькими тегами:

http://stackoverflow.com/questions/tagged?tagnames=jquery or css or asp.net or php or web-development or svn

Разумно отделить их от , или ;, если они не являются допустимыми символами для самих тегов. Обычно поисковые системы используют q=keyword1+keyword2 и url-encode any + в самих ключевых словах, что я бы предложил вам, если это для URI поиска.

Ответ 3

это зависит

если вы хотите, чтобы ваш ресурс ALLWAYS был доступен с условием 1 ИЛИ condition2, вы можете просто обрабатывать их таким образом...

но если вы хотите иметь обе возможности (используя AND или OR), вам нужно будет реализовать что-то вроде annakata said, параметр, указывающий, как условия должны быть добавлены в запрос qu...

если вы хотите иметь более гибкий подход (cond1 и cond2 или cond3), я не вижу другого выбора, кроме как реализовать собственный запрос с бесплатным текстом, как вы сказали...

С другой стороны, если вы все время запрашиваете одно и то же поле (что, я думаю, не так, потому что вы указали field1, field2), вы можете использовать метод alblemb и просто использовать некоторый символ ( "," или ";" ) для разделения значений...

лично я разработал какой-то язык микропроцессов, например

field1 = val1..val2 (поле 1 между val1 и val2) field1 = > val2 (field1 > val2) field1 = val1; val2 (field1 = val1 или field1 = val2) filed1 = val1 (поле 1 содержит val1)

field1 = val1..val2 & > val3 (поле1 между val1 и val2 и поле1 > val3...

ну, вы получите идею

но затем я объединяю каждое условие с и, поэтому это просто расширенный пример того, как waht aleemb говорил...