2013-10-08 44 views
1

我目前正在使用MVC框架實現RESTful API。我已經建立了一些控制器允許我訪問了一些普通的集合數據,例如:如何在編寫RESTful API時構建MVC控制器

GET /products 
GET /products/1 
GET /users 
GET /users/1 

我的控制器的結構使得它有get()post()put(),並且delete()方法匹配了這傳入請求所產生的HTTP動詞。然後在get()功能例如我檢查,如果ID是當前和鍛鍊是否獲取單個對象或數組,像這樣:

public function action_get() 
{ 
    $id = (int) $this->request->param('id'); 
    if (empty($id)) 
    { 
     // return an array of everything 
    } 
    else 
    { 
     // return a specific object 
    } 
} 

這一切工作正常。然而,下一步是要我的產品或用戶的關係,因此,例如:

GET /users/1/transactions 
GET /users/1/transactions/1 

現在很明顯,我可以添加這個到action_get()上述方法,但是這將使它臃腫。那麼我應該爲事務創建一個單獨的控制器,並通過一些巧妙的路由傳遞用戶ID作爲參數?

回答

1

你的users可以有很多transactions對不對?所以最好有一個單獨的交易控制器。就像你爲你的用戶所做的那樣,是爲了交易。 Separation of Concerns

GET /transactions 
GET /transactions/1 

這樣你不僅會受益於你的控制器GET簡單,但你也可以組織你的控制器接受POSTDELETEPUT

+0

嗯,這是在簡單方面,但在RESTful端點設計方面哪些更好:'GET/users/1/transactions'或'GET/transactions?user = 1' – diggersworld

+0

第二個。我建議你觀看[this](http://www.youtube.com/embed/o-4mibDn_aU)並閱讀[this](http://net.tutsplus.com/tutorials/other/a-beginners-introduction-對HTTP和休息/)。 – u54r