Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时使用pathParams或QueryParams_Java_Rest_Jax Rs - Fatal编程技术网

Java 何时使用pathParams或QueryParams

Java 何时使用pathParams或QueryParams,java,rest,jax-rs,Java,Rest,Jax Rs,什么时候应该为URL使用路径参数,什么时候应该使用查询参数,是否有经验法则 假设我有一张表格发票,上面有company(PK)、InvoiceNo(PK)、Invoiceline、invoiceValue、noOfLines、salesPerson等字段 我目前的想法是,你的URL应该符合 /Invoice/ 将显示所有发票 /Invoice/{company} 这将显示公司的所有发票 /Invoice/{company}/{InvoiceNo} 显示特定的发票和发票 /Invoice/{

什么时候应该为URL使用路径参数,什么时候应该使用查询参数,是否有经验法则

假设我有一张表格发票,上面有company(PK)、InvoiceNo(PK)、Invoiceline、invoiceValue、noOfLines、salesPerson等字段

我目前的想法是,你的URL应该符合

/Invoice/
将显示所有发票

/Invoice/{company}
这将显示公司的所有发票

/Invoice/{company}/{InvoiceNo}
显示特定的发票和发票

/Invoice/{company}/{InvoiceNo}?invoiceLineNo=23
仅显示第23行

我的想法是,主键字段应该是路径的一部分,而您要筛选的任何其他字段都是查询参数的一部分


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

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

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

仅添加到Gareth的答案中,可选参数也更容易作为查询参数。通常是服务器框架的约束决定了哪一个是最佳选择。对于参数是查询参数还是路径参数,尝试推断太多语义意义并不是真正明智的做法。请记住,URI对客户端是不透明的。

@Gareth是否有一个框架可用于自动将实体连接到URL?例如sort=Date真的很好,但是除非我有特殊的需要,否则我不会考虑把它包括进去。我不知道。实际上,我已经在我的一个应用程序中编写了一个半自动的版本,它对hibernate/lucence查询应用了
分页请求
,但像所有这些东西一样,将其取出并开放源代码是相当困难的work@Gareth那是不是lucene和lucene一样讨厌?;-)@GarethDavis在对数据进行修改时会怎样?@Tony也差不多。。因此,邮寄/发票/52/项目另见: