我是RESTful球衣的新手.我想问一下是什么之间的不同@PathParam,并@QueryParam在球衣?
关于何时应该使用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行.
我想的方式是主键字段应该是路径的一部分,你要过滤的任何其他字段都是查询参数的一部分.
这听起来像是区分两者的合理方式吗?
什么是Resteasy?RESTEasy和JAX-RS有什么区别?@PathParam和之间有什么区别@QueryParam?
我有2个资源:courses和professors.
A course具有以下属性:
A professor具有以下属性:
所以,你可以说课程有一位教授,一位教授可能有很多课程.
如果我想获得所有课程或所有教授,我可以:GET /api/courses或GET /api/professors分别.
当我想要获得某位教授所教授的所有课程时,我的困境就来了.
我可以使用以下任何一种方法:
GET /api/professors/:prof_id/courses GET /api/courses?professor_id=:prof_id我不确定要使用哪个.
目前,我正在使用后者的增强形式.我的理由是,如果我想添加过滤/排序标准,它更具可扩展性.
我实际上是在编码/嵌入JSON字符串到查询参数中.因此,(解码)示例可能是:
GET /api/courses?where={professor_id: "teacher45", year: 2016}&order={attr: "topic", sort: "asc"}
Run Code Online (Sandbox Code Playgroud)
上述请求将检索教授使用2016年提供的professor_id教授(或当前正在)教授的所有课程,按照主题标题按升序ASCII顺序排序.
我从来没有见过有人这样做过,所以我想知道我是不是做了些蠢事.
是否有使用查询字符串与资源路径进行过滤条件的标准做法?过去做过什么更大的API?是否可以接受或鼓励同时使用两种范例(使两个端点都可用)?如果我确实应该使用第二种范式,除了编码JSON之外,还有更好的组织方法吗?有没有人在他们的查询字符串中看到使用JSON的另一个公共API?
编辑基于意见较少.(看评论)
我正在使用jetty 9.0.3.
如何将URL(例如www.myweb.com/{servlet}/{parameter})映射到给定的servlet和参数?
例如,URL"/ client/12312"将路由到clientServlet,其doGet方法将接收12312作为参数.
如果在何时/何时不使用上述将信息传递给REST调用的方法,我一直试图找到答案.
我一直在寻找各地,但每个帖子只讨论两种列出的方法之间的差异,或3,而不是所有4.
java ×4
rest ×4
jax-rs ×3
api ×1
api-design ×1
dictionary ×1
http ×1
jersey ×1
jetty ×1
resteasy ×1
routing ×1
spring ×1
spring-boot ×1
url ×1