Как сопоставить URL-адреса различным методам в зависимости от наличия параметров запроса (JAXB) - PullRequest
5 голосов
/ 15 марта 2011

Я пишу сервисы ReST, используя JAXB / Jersey.Я хотел бы выполнить другую обработку на стороне сервера и вернуть другой ответ в зависимости от того, есть ли у URL параметры запроса.Пример:

http://domain.com/Person

будет отображаться на странице, документирующей доступные службы «Персона», а

http://domain.com/Person?search="someName"

будет возвращать результаты поиска людей.

В настоящее время у меня есть соглашение, согласно которому пользователи могут получать информацию об использовании / документации для каждой категории услуг, запрашивая базовый URL (т. Е. http://domain.com/Person, http://domain.com/Facility).Кроме того, документация возвращается в формате XML, JSON, HTML или в виде простого текста, в зависимости от заголовка Content-Type.

Вопрос 1: Является ли это хорошим дизайном для службы ReST?
Вопрос 2: Как сопоставить URL-адреса различным ответам в зависимости от того, есть ли у URL параметры запроса?

Ответы [ 2 ]

6 голосов
/ 15 марта 2011
  1. Не думаю, что это хороший дизайн.Предполагая, что URL указывает на ресурс, я не думаю, что ресурсы должны отличаться только параметрами запроса.Вы можете использовать другой тип контента или добавить URL.Например, http://domain.com/Person и http://domain.com/Person/search

  2. Нет.JAX-RS не допускает такой дифференциации.Различение основано на самом URL (без строки запроса) и на создании / использовании типа контента.

3 голосов
/ 16 марта 2012

В качестве альтернативы я бы рассмотрел:

http://domain.com/service/People - Описание услуги

http://domain.com/People - Список всех людей

http://domain.com/People?search=someName - Список всех людей на основепо критериям поиска

http://domain.com/People/1234 - список конкретных лиц

Логически представленные ресурсы теперь более согласованы.Это означает, что если ваш поиск может вернуть несколько людей, ресурс / People по-прежнему представляет собой список людей.

Ресурс, представленный / People, является не описанием службы, а реальными людьми.Следовательно, почему я бы вытащил его на другой URL.

...