何时使用pathParams或QueryParams

Tim*_*arg 31 java rest jax-rs

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

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

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

/Invoice/
Run Code Online (Sandbox Code Playgroud)

哪个会显示所有发票

/Invoice/{company}
Run Code Online (Sandbox Code Playgroud)

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

/Invoice/{company}/{InvoiceNo}
Run Code Online (Sandbox Code Playgroud)

显示特定发票和

/Invoice/{company}/{InvoiceNo}?invoiceLineNo=23
Run Code Online (Sandbox Code Playgroud)

仅显示第23行.

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

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

Gar*_*vis 49

我个人的经验法则是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?
Run Code Online (Sandbox Code Playgroud)

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


Dar*_*ler 6

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