2015-04-22 28 views
9

我正在嘗試使用springMVC來構建一個寧靜的樣式API。SpringMVC - 調度服務器的網址格局樣式

當爲springMVC的DispatcherServlet配置url模式時,似乎有2個選擇,我需要一些建議。

選項A:
配置圖案爲:<url-pattern>*.action</url-pattern>
和動作使用路徑等@RequestMapping("/role/add.action")

選擇B:
配置圖案爲:<url-pattern>/api/*</url-pattern>
和動作使用路徑等@RequestMapping("/api/role/add")

我更喜歡使用沒有後綴的樣式,但在這種情況下,我需要做一個dd一條子路徑。

但我不確定在作爲後端的項目中使用哪個更適合使用瀏覽器/ IOS/Android作爲客戶端來提供平靜的API。


有可能是一個選項C,但我不知道:

配置模式爲:<url-pattern>/*</url-pattern>
和行動使用路徑喜歡@RequestMapping("/role/add")

在這種情況下,內置servlet將被覆蓋,例如jsp將無法正常工作。
但我沒有任何jsp,而且像html/js/css/image/document/music/video這樣的靜態資源全部放在另一個端口或服務器nginx服務器上,對tomcat的請求只通過json數據提供ajax服務。
那麼在這種情況下使用選擇C是否合適,或者它有一些不良的副作用?

+1

我建議使用Spring啓動,這省去了一個網絡界面任何這樣的規範。 – chrylis

+0

@chrylis你能幫我解釋一下spring引導如何解決這個問題嗎?因爲根據servlet規範,我無法找到既沒有後綴又沒有子路徑的模式,同時可以避免覆蓋內置的servlet。 –

+0

Spring Boot爲您管理整個容器,因此您不必指定任何路徑。 – chrylis

回答

3

如果你的目標是寧靜的API我的選擇是第二個,因爲您識別URL中的資源;說你必須管理角色的資源,你應該有一些映射像這樣的:

@RequestMapping("/api/role" method = RequestMethod.POST) 

插入一個新角色(可能是API不允許這樣)

@RequestMapping("/api/role/{roleId}" method = RequestMethod.PUT) 

更新現有角色

@RequestMapping("/api/role/{roleId}" method = RequestMethod.DELETE) 

刪除角色

@RequestMapping("/api/role" method = RequestMethod.GET) 

檢索角色(您可以通過查詢字符串實現一些過濾器)

這同樣適用於命名模式相同的其他資源(用戶等)。

我vould避免備選方案C,因爲我認爲這是最好有這種API的一個專用的映射,如果你的應用程序還附帶不使用API​​

3

我將與選擇B爲REST風格的服務,考慮執行CRUD操作使用REST。而且你可以映射url-pattern爲,

config pattern as: <url-pattern>/api/*</url-pattern> 

所以要進行添加,你可以確保你的頁面發佈JSON對象,並有像/api/add

,並在刪除時的URL,你可以簡單地遵循。考慮你將使用其ID刪除列表中的object。你可以簡單地做出來的,

/api/delete/${id}

和處理它像,

@RequestMapping(value="/{id}", method=RequestMethod.GET) 
+0

好的建議,但許多API有多個參數,所以我仍然需要把參數放在'?'後面或http身上。 –

+0

是的,它也取決於API。爲什麼不使用多個參數的對象。 –

+0

我有時候會使用對象,但它也只適用於API的一部分,例如搜索服務可能包含來自多個模型的更多參數。 –