Когда использовать pathParams или QueryParams

Существует ли эмпирическое правило относительно того, когда следует использовать параметры пути для URL-адреса, а когда следует использовать параметры запроса?

Скажем, у меня есть таблица Invoice с полями company(PK),InvoiceNo(PK), Invoiceline, invoiceValue, noOfLines, salesPerson

В настоящее время я думаю, что ваш URL должен соответствовать строкам

/Invoice/

Который будет отображать все счета

/Invoice/{company}

Который будет отображать все счета для компании.

/Invoice/{company}/{InvoiceNo}

Отображает этот конкретный счет и

/Invoice/{company}/{InvoiceNo}?invoiceLineNo=23

отображает только строку 23.

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

Звучит ли это как разумный способ провести различие между ними?


person Tim Sparg    schedule 14.06.2011    source источник
comment
См. также: stackoverflow.com/q/11552248/1725096   -  person Jens Piegsa    schedule 27.04.2015


Ответы (2)


Мое личное эмпирическое правило, согласно которому PathParam приводит к типу объекта, который вы запрашиваете.

/Invoices             // all invoices
/Invoices?after=2011  // a filter on all invoices

/Invoices/52          // by 52
/Invoices/52/Items    // all items on invoice 52
/Invoices/52/Items/1  // Item 1 from invoice 52

/Companies/{company}/Invoices?sort=Date
/Companies/{company}/Invoices/{invoiceNo} // assuming that the invoice only unq by company?

Процитируем г-на Роу: Параметры пути для группировки данных, параметры запроса для фильтрации

person Gareth Davis    schedule 14.06.2011
comment
@Gareth Есть ли используемая вами структура, которая автоматически связывает объекты с URL-адресами? например, sort=Date было бы неплохо иметь, но если бы у меня не было особой потребности, я бы не подумал включать его. - person Tim Sparg; 15.06.2011
comment
Не то, чтобы я знаю. На самом деле я написал полуавтоматическую версию этого в одном из моих приложений, он применил PaginationRequest к запросу hibernate/lucence, но, как и все эти вещи, его извлечение и открытие, это довольно много работы. - person Gareth Davis; 15.06.2011
comment
@Gareth Является ли эта люцена неприятной, как в люсене? ;-) - person Gary Rowe; 16.06.2011
comment
@GarethDavis А как насчет внесения изменений в данные? - person Tony; 24.09.2014
comment
@Tony почти то же самое.. поэтому POST /Invoices/52/Items ‹‹ добавьте новый элемент в счет-фактуру 52 PUT /Invoices/52/Items/2 ‹‹ обновите элемент 2 в счете-фактуре 52 - person Gareth Davis; 25.09.2014
comment
developer.yahoo.com/social/rest_api_guide/ - person traditional; 05.10.2014

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

person Darrel Miller    schedule 14.06.2011