2015-06-08 111 views
1

我有一個Web API項目,當前有一個ServicesController。我得到的服務列表,對於一個服務器,通過使該電話:Web API - 控制器設計

$http.get(rootWebApiUrl + '/api/services/' + server) 

的ServicesController有這樣的簽名:

public IEnumerable<FirstSolarService> Get(string id) 

現在我想讓兩個電話。

  1. 獲取服務本身的路徑中的Windows文件夾。
  2. 用戶在#1中選擇一個文件夾後,顯示該文件夾中的DLL。

我有一個選擇,只要我的Web API控制器去。我把這一切都放在ServicesController中,還是應該爲每個返回的對象類型創建單獨的控制器?如果是後者,那麼我會創建這兩個控制器:

  1. FoldersController
  2. FilesController

但是,什麼是尷尬有關(可能)是我想通過傳遞東西調用每個那些除了文件夾或文件的ID以外。要獲取文件夾,我會傳入服務名稱。爲了獲取文件,我會傳遞服務的路徑。這是它應該完成的方式嗎?我只想以正確的方式做到這一點。

+0

我不認爲你應該把它分成多個控制器,除非它們每個都具有相當的功能(或文件夾和文件是真正的域對象/存儲庫實體)。正如您可能知道的那樣,您不僅限於WebAPI中方法名稱的'Get' /'Post' /'Put' /'Delete'約定。如果需要,您可以指定操作名稱。例如,如果你想要一個'Folders'方法,你可以添加一個(即'[HttpGet] public ReturnType Folders(string serviceName)'),你的URL就是''/ api/services/folders /'+ server' 。 –

+0

啊,很高興知道。那麼我只需要在我的RouteConfig中創建一個路由,並且應該可以工作。從哲學上講,從服務控制器返回文件夾是否正確? –

+0

您可能甚至不需要創建路由 - 默認的路徑包含「{action}」組件。在哲學上,我會問:服務是由文件夾組成的嗎?沒有服務可以存在文件夾?如果文件夾依賴於服務,那麼我認爲可以在服務控制器中包含該功能。如果他們不這樣做,則根據功能分開控制器。 –

回答

2

我不認爲你應該把它分成多個控制器,除非它們每個都有相當的功能,或者文件夾和文件是真正的域對象/存儲庫實體。

正如你可能知道,你是不是僅限於Get/Post/Put/Delete約定在WebAPIs方法名。如果需要,您可以指定操作名稱。例如,如果你想要一個Folders方法,你可以添加一個:

[HttpGet] 
public ReturnType Folders(string serviceName) 
{ 
} 

針對上述您的API URL將'/api/services/folders/' + server

您不需要創建自定義路由 - 默認路由包含{action}組件。在哲學上,我會問自己:服務是由文件夾組成的嗎?沒有服務可以存在文件夾?如果文件夾依賴於服務,那麼我認爲可以在服務控制器中包含該功能。如果他們不這樣做,則根據功能分開控制器。