我有一个控制器,它有一些功能。
我的问题是我希望这样做:
GET /v1.0/products @controllers.ProductController.getProductsByCategory(lang: String ?="en_US", t:String, cat:String, start: Int ?=0, maxresults:Int ?=100, sort:String ?="rank", order:String ?="asc")
GET /v1.0/products @controllers.ProductController.getProducts(lang: String ?="en_US", t: String, ids: String)
我在控制器中有2个功能:
def getProducts(lang: String, t: String, ids: String) = Action { ... code.. }
和
def getProductsByCategory(lang: String, t: String, cat:String, start: Int, maxResults:Int, sort:String, order:String) = Action { ... Code ...}
这不起作用。我必须像这样定义路线:
GET /v1.0/products/bycategory @controllers.ProductController.getProductsByCategory(lang: String ?="en_US", t:String, cat:String, start: Int ?=0, maxresults:Int ?=100, sort:String ?="rank", order:String ?="asc")
GET /v1.0/products @controllers.ProductController.getProducts(lang: String ?="en_US", t: String, ids: String)
如果没有在路径中添加“bycategory”,有没有办法实现这一目标?
由于
答案 0 :(得分:3)
你不能使用两条路径相同的路径(Haris,已经写过了),但你可以更好地使用路由器,我用的就是(伪代码) )
GET /products getAllProducts()
GET /products/:catId getProductsByCat(catId)
GET /products/:catId/:id getSingleProductWithinCat(catId, id)
所以你有/products
> /products/toys
> /products/toys/rc-plane
当然你仍然可以添加你的可选参数:
GET /products/toys?start=10&maxresults=250
请注意,这些是GET
个路线=并且普通用户会尝试手动修改以加强搜索,这是正常的,所以如果/products/toys/rc-plane
不能满足他,他会先尝试再次升级到/products/toys
答案 1 :(得分:2)
实现此目的的一种方法是使用一种方法来获取产品,例如
GET /v1.0/products @controllers.ProductController.getProducts(lang: String ?="en_US", t:String, cat:String ?= "", start: Int ?=0, maxresults:Int ?=100, sort:String ?="rank", order:String ?="asc")
您可以在其中设置默认类别为none / null。如果您需要所有产品,请将其保留为默认值,例如
http://myhost/v1.0/products
如果您需要类别
http://myhost/v1.0/products?category=hotsauces