在RESTFUL風格中怎樣定義需要多個參數才能確定的資源路徑
有些資源只需要一個參數就能定位出來比如xxx.com/user/2就定位了id號爲2的用戶,但是有些資源需要兩個或者兩個以上的參數才能定位,該如何組織這種資源的URL比較好?
比如要表示x軸爲2,y軸爲3的點該用下列哪種URL比較好?
1. xxx.com/dot/2/3
2. xxx.com/dot?x=2&y=3
3. xxx.com/dot/2-3(or 2.3)
或者還有別的更好的方案?求指教
3 個回答
可以參照Rails中的標準的定義方式。
如果定義這個資源的兩個參數具有從屬關係,那麼生成的路由就是
owner/1/property/1
其中property從屬於owner。
比如用戶1的編號爲2的文章,就是users/1/articles/2
如果兩個資源是平等的,那麼一般是作爲路由中HTTP方法的參數,
比如你提到的“要表示x軸爲2,y軸爲3的點”,就一般是用xxx.com/dot?x=2&y=3
個人認爲2更好。
restful 的url表示資源的邏輯地址,每個網址代表一種資源(resource)。x軸爲2,y軸爲3的點可以理解成對點的過濾,x=2和y=2都是過濾條件。
以上是個人觀點,歡迎指正~
對於restful的理解及api設計可以參考 阮一峯 大神的blog:
http://www.ruanyifeng.com/blog/2011/09/restful.html
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
@Controller
@RequestMapping("/second")
public class SController {
//如果有多個請求參數時,只需要中間用"/"分開就好,但是此時web.xml中需要配置/
@RequestMapping("/answer/{id}/{key}")
public String answer(@PathVariable("id")String id,@PathVariable("key")String key,HttpServletRequest request,HttpServletResponse response,Model model) throws Exception{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
if(key == null || !key.trim().matches("[a-z0-9]{32}")){
return "errorkey";
}
if(id==null||"".equals(id)){
return "errorURI";
}
return "OK";
}
}
最終請求地址是://http://localhost:8080/funny/second/answer/109885/f23c92defda04fa97807d7a60c0a56e5
返回結果:
{
"error_code": 0,
"reason": "Success",
"result": {
"data": [
{
"id": 109885,
"body": "卻上心頭。",
"valid": 0,
"title": "已有推辭之意(打一瓊瑤作品)",
"cname": "謎語"
}
]
}
}