API поиска - формат аргумента HTTP-запроса - PullRequest
1 голос
/ 26 сентября 2011

Я создал поисковый API для сайта, над которым я работаю.Например, некоторые из поддерживаемых им запросов:

  • /api/search - возвращает популярные результаты поиска
  • /api/search?q=car - возвращает результаты, соответствующие термину "автомобиль"
  • /api/search?start=50&limit=50 - возвращает 50 результатов, начиная со смещения 50
  • /api/search?user_id=3987 - возвращает результаты, принадлежащие пользователю с идентификатором 3987

Эти аргументы запроса можно смешивать и сопоставлять.Это реализовано под капотом с использованием Solr фасетного поиска.

Я работаю над добавлением аргументов запроса, которые могут фильтровать результаты на основе числового атрибута.Например, мне может потребоваться возвращать результаты только в том случае, если количество просмотров превышает 100. Мне интересно, как лучше всего указывать это.

Solr использует этот способ:

/api/search?views:[100 TO *]

Google, кажется, делает что-то вроде этого:

/api/search?viewsisgt:100

Ни один из них не кажется мне очень привлекательным.Есть ли лучшая практика для определения этого вида термина запроса?Есть предложения?

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

Просто используйте ',' в качестве разделителя для from / to, он читается лучше и, на мой взгляд, интуитивно понятен:


# fixed from/to
/search?views=4,2

# upper wildcard
/search?views=4,

# lower wildcard
/search?views=,4

Я принимаю значения включительно.В большинстве случаев вам не понадобится исключительный / включающий дополнительный синтаксический сахар.

Привязка даже очень хорошо работает в некоторых интегрированных средах (например, в Spring mvc), которые связывают разделенные значения ',' с массивом значений.Затем вы можете обернуть внутренний массив специальными средствами доступа (getMin (), getMax ()).

0 голосов
/ 26 сентября 2011

Я думаю, что математические обозначения для пределов подходят.

[x  the lower limit can be atleast x
x]  the upper limit can be atmost x
(x  the lower limit must be strictly greater than x
x)  the upper limit must be strictly lesser than x

Следовательно,

q=cats&range=(100,200) - the results from 100 to 200, but not including 100 and 200
q=cats&range=[100,200) - the results from 100 to 200, but the lower limit can be greater than 100
q=cats&range=[100 - any number from 100 onwards
q=cats&range=(100 - any number greater than 100
q=cats&range=100,200 - default, same as [100,200] 

Конечно, его эстетика все еще сомнительна, но кажется (IMO) наиболее интуитивнымдля человеческого глаза, и синтаксический анализатор все еще прост.

Согласно http://en.wikipedia.org/wiki/Percent-encoding =, &, [,], (,) зарезервированы

0 голосов
/ 26 сентября 2011

Подход Google хорош, почему он не привлекателен?

Вот мое предложение:

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