Стратегия REST для перегрузки глагола GET - PullRequest
0 голосов
/ 28 сентября 2018

Рассмотрим необходимость создания конечной точки GET для извлечения сведений об участнике, используя любой из 4 вариантов (это часто встречается в устаревшем приложении с вызовами RPC)

  1. Получить участника по идентификатору
  2. Получитьучастник по SSN
  3. Получить участника по комбинации Phone и LastName (оба должны быть пропущены)

Какая рекомендуемая стратегия для поддержания духа REST и при этом обеспечения этой гибкости?

Вот некоторые возможные варианты:

На основе параметров

/user/{ID}  
/user?ssn=?
/user?phone=?&lname=?

Отдельные конечные точки

/user/{ID}
/user/SSN/{SSNID}
/user/{lname}/{phone}

RPC для пользовательских

/user/{ID}
/user/findBySSN/
/user/findbycontact/

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

REST ≠ красивые URL.Они ортогональны.
Мне кажется, ваш вопрос касается последнего.

Хотя остальные ответы были хорошими, если вы хотите, чтобы ваш API работал с HTML-формами, перейдите к параметрам запроса в коллекции./user ресурс для всех полей, даже для идентификатора (при условии, что человек печатает их на основе информации, которую он получает с листов бумаги на своем столе и т. Д.)

Если ваш сервер может создавать ссылкик каждой записи всегда создавайте канонические ссылки, такие как /users/{id}, не дублируйте данные под разными URL.

0 голосов
/ 28 сентября 2018

REST не имеет значения, какое правописание вы используете для своих идентификаторов.

Например, подумайте, как бы вы делали это в Интернете.Вы должны предоставить формы, по одной для каждого набора критериев поиска.Потребитель будет выбирать, какую форму использовать, и отправлять форму, даже не зная, что такое URI.

В случае форм HTML существуют особые правила обработки для описания того, как информация формы будет скопирована вURI.Форма имеет вид шаблона URI .

Шаблон URI обеспечивает как структурное описание пространства URI, так и, когда предоставляются значения переменных, машиночитаемые инструкциио том, как создать URI, соответствующий этим значениям.

Но нет никаких правил, ограничивающих сервер от предоставления шаблона URI, который предписывает клиенту скорее копировать значения переменных в сегменты путичем в строку запроса.

Другими словами, в REST сервер сохраняет контроль над своим собственным пространством URI.

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

...