何时使用pathParams或QueryParams

时间:2011-06-14 15:08:46

标签: java rest jax-rs

关于什么时候应该使用URL的路径参数而不应该使用查询参数,是否有经验法则?

说我有一个表发票,包括字段公司(PK),InvoiceNo(PK),Invoiceline,invoiceValue,noOfLines,salesPerson

我目前的想法是你的网址应该是

/Invoice/

哪个会显示所有发票

/Invoice/{company}

这将显示公司的所有发票。

/Invoice/{company}/{InvoiceNo}

显示该特定发票和

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

仅显示第23行。

我想的方式是主键字段应该是路径的一部分,你要过滤的任何其他字段都是查询参数的一部分。

这听起来像是区分两者的合理方法吗?

2 个答案:

答案 0 :(得分:48)

我个人的经验法则是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?

引用Mr Rowe用于分组数据的路径参数,用于过滤的查询参数

答案 1 :(得分:6)

只是为了添加Gareth的答案,可选参数也更容易作为查询参数。通常,服务器框架的约束决定哪个是最佳选择。尝试推断参数是查询参数还是路径参数的过多语义意义并不是明智之举。请记住,URI对客户端来说是不透明的。