Я не эксперт по REST, но позвольте мне добавить 2 ¢:
В человеческом Интернете формы HTML часто используются для построения URI для представления результатов поиска.Проблема в том, что программируемый веб не имеет форм.Но вы можете легко определить что-то аналогичное себе, например:
Определите тип носителя для описаний поиска, скажем, application/prs.example.searchdescription+json
(но обратите внимание на PS в конце этогоответ);
Предоставить подресурс, представляющий поиск пользователей, /users/search
.
Второй шаг будет достигнутссылка на этот подресурс откуда-то еще.Например, скажем, клиент запросил GET /users
.Он может получить что-то вроде этого:
{ _links: [ …, { rel: "search", href: "/users/search" }, …] }
Клиент может перейти по этой ссылке и POST
спецификация поиска для этого ресурса URI, например:
POST /users/search
…
Content-Type: application/prs.example.search-definition+json
…
{ criteria: { surname: "Harvey" }, maxResults: 25 }
Здесь, criteria
содержит (частичное) представление объектов, которые будут найдены.Это может быть сделано в произвольно сложном описании.
На запрос, как описано выше, сервер может затем ответить кодом состояния 200 OK
и, в теле объекта, ссылкой на ресурс, представляющий результаты дляотправленный поиск:
{ _links: [ { rel: "results", href: "/users?surname=Harvey&maxResults=25" } ] }
Затем клиент может перейти к URI с отношением results
, чтобы получить результаты поиска, даже не собирая сам URI.
PS : Когда я изначально писал это, я еще не осознавал, что определение новых типов носителей все время может стать проблематичным. Марк Ноттингем писал о «распространении медиа-типов» и о том, как с ним бороться , используя profile
связь .