我已经学习了Play框架和#Java; Play for Java'曼宁的书。
本书介绍了第二个请求路径比第一个请求路径更安静。因为页面列表会随着时间的推移而改变。
即使它可以改变,为什么第二个更好?
GET / products /:page controllers.Products.list(page:Int)
GET / products / controllers.Products.list(page:Int)
答案 0 :(得分:2)
本书中实际描述的是,第一条路线需要该参数,所以即使您不想使用任何您需要的...
/products/0
/products/1
/products/2
等
在第二个路线中,参数是可选的,因此在与寻呼机
一起使用时它非常有用/products
/products?page=1
/products?page=2
当然,您可以使用第一种方法创建2条路线,以获得相当于可选参数:
GET /products controllers.Application.products(page: Int ?= 0)
GET /products/:page controllers.Application.products(page: Int)
首先是更好的,当你总是传递相同数量的参数时,所有这些都是必需的
GET /cars/:manufacturer/:model/:option controllers.Application.cars(manufacturer, model, option)
Which must be: /cars/BMW/Z4/Pure-Balance
另一方面,当你有大量的可选参数时,第二条路线更舒适
GET /filter controllers.Application.filter(query, order, direction)
which can be:
/filter?query=something&order=name&direction=desc
/filter?order=branch
/filter?query=something-else
等
我们不能说一个更好,第二个更糟,只是两个都有其他用法,看看文档熟悉optional params
, fixed values
and default values
答案 1 :(得分:0)
url路径应始终是唯一的资源标识符。
该页面远离唯一标识符。它是mapreduce参数的当前请求的一部分,因此您应该在range headers或queryString中发送它。
例如:
GET /products?page=1&count=1
- 始终返回包含第一项资源的集合资源的表示,具体取决于排序GET /products/1
- 始终返回具有id=1
顺便说一下,我建议您read about DDD and bounded contexts,“产品”可能不是最好的词,列表不是这种格式......