我正在通過與我的項目類似的練習。
我正在試圖決定讓所有工作都以優雅,可擴展的方式工作的最佳方式。 目前,這就是我:
/controllers/apiController
/controllers/api/v1/resourceaController <extends apiController>
/controllers/api/v1/resourcebController <extends apiController>
/controllers/api/v1/resourcecController <extends apiController>
我建立的解決方案具有的URL規則將用戶重定向直奔基於該方法在apiController適當的CRUD功能使用:
// REST API routes
array('api/list', 'pattern' => 'api/v<version:\d+>/<resource:\w+>', 'verb'=>'GET'),
array('api/create', 'pattern' => 'api/v<version:\d+>/<resource:\w+>', 'verb'=>'POST'),
array('api/view', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>', 'verb'=>'GET'),
array('api/update', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>', 'verb'=>'PUT'),
array('api/delete', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>', 'verb'=>'DELETE'),
array('api/list', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>/<association:\w+>', 'verb'=>'GET'),
array('api/create', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>/<association:\w+>', 'verb'=>'POST'),
array('api/view', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>/<association:\w+>/<association_id:\d+>', 'verb'=>'GET'),
array('api/update', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>/<association:\w+>/<association_id:\d+>', 'verb'=>'PUT'),
array('api/delete', 'pattern' => 'api/v<version:\d+>/<resource:\w+>/<resource_id:\d+>/<association:\w+>/<association_id:\d+>', 'verb'=>'DELETE'),
功能接收到調用將嘗試基於$ _GET ['resource']實例化資源控制器並調用存儲在$ _GET ['association']中的函數。
我認爲這使得它的擴展性相當好,因爲我們可以有新版本的API出來,而且我們必須這樣做才能創建類似/ api/v2,/ api/v2並將所有必需的資源控制器在那裏。
我不完全確定您的意思是「服務器」的上下文,但是如果我不瞭解問題的其餘部分,我會使用與URL管理器結合使用的控制器來創建RESTful服務。 – ldg
嗨,是的,我認爲這就是我要採取的路線,我想當我開始規劃應用程序時,我一直在思考問題!即時通訊採取這種方式, 我有一個ApiController,擴展CController然後處理請求的控制器都擴展了api控制器 –