为什么以下请求路径更安静?

时间:2014-05-06 11:50:58

标签: rest playframework

我已经学习了Play框架和#Java; Play for Java'曼宁的书。

本书介绍了第二个请求路径比第一个请求路径更安静。因为页面列表会随着时间的推移而改变。

即使它可以改变,为什么第二个更好?

  

GET / products /:page controllers.Products.list(page:Int)

     

GET / products / controllers.Products.list(page:Int)

2 个答案:

答案 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,“产品”可能不是最好的词,列表不是这种格式......