2009-06-06 45 views
6

在編寫具有前端和JSON路徑到所需數據的MVC應用程序時,推薦使用什麼命名約定?JSON動作的MVC命名約定

例如,假設您網站的用戶擁有「東西」。他們應該能夠訪問一個頁面來查看他們的內容,但我們也需要一種方法將這些內容作爲其他頁面上的JSON來回收。我已經能夠想到幾種選擇,但是我對他們中的任何一個都不夠敏銳。下面是我得到了什麼:

  1. /事/列表的UI,/JSON /東西的JSON - 這將需要JsonController這將最終服務於不同類型的對象,從而擊敗任何機會在我們開始之前實體分離。
  2. /things/list對於UI,/things/list/json對於JSON-可能是我目前的首選選項,但需要魔術串(儘管只是「json」)。另外,如果你還需要一個(字符串id)動作簽名來獲取某些過濾參數或者類似內容,那麼你可以選擇添加一個額外的路由或者做一些髒字符串分割。
  3. /帳號/ mythings的UI,/事/列表的JSON - 有點清潔,但可能並不總是相關的控制器,你可以從所服務的「東西」。另外,你再混合實體。

歡迎任何建議,謝謝!

+0

請看看[Action Naming Convention]上的回答(http://stackoverflow.com/questions/118474/action-naming-convention/38994001#38994001)。希望這有助於... – 2016-08-17 10:25:58

回答

15

可以說,路徑名可以全部相同。您可以檢查接受的MIME類型客戶的期望響應的頭,然後返回基於你的發現有一個合適的觀點:

  • 應用/ JSON:JSON查看
  • 文本/ XML:XML查看
  • 文/平原,文本/ HTML:JSP 查看

瀏覽器將該字段設置爲HTML;您的JSON客戶端會根據需要設置該字段。

+2

我同意。這是HTTP內容協商的目的。 我會建議定義您自己的MIME類型,以便您可以版本您的JSON數據格式。像application/vnd.mycorp.myformat-1.0 + json。這樣,當格式發生變化時,可以將其更改爲application/vnd.mycorp.myformat-1.1 + json(用於向後兼容的更改)或application/vnd.mycorp.myformat-2.0 + json(用於向後兼容更改)。 – Nat 2009-06-06 12:35:12

1

任何人都不可能爲要求JSON的URL添加書籤,所以我認爲將URL保持爲乾淨並不重要。它也可能以編程方式生成,而不是手動輸入。鑑於這些,我會考慮將其添加爲查詢參數。

/things/list -- HTML 
/things/list?format=json -- JSON 

如果您確實有ID參數或需要其他參數,則這不會破壞您的URL。它也可以與POST以及GET一起工作。

/things/1 -- HTML for "thing 1" 
/things/1?format=json -- JSON for "thing 1" 
1

我用的

/things/list -- HTML 
/things/_listpage -- AJAX 

公約的規則是所有AJAXed行動/視圖有一個前導下劃線。這告訴我他們從來沒有被稱爲頂級,並且通常沒有關聯的母版頁。在這種情況下,我保持在同一個控制器下的操作,以共享任何關聯的邏輯。

通常在列表視圖中我將有一個

<% RenderAction("_listpage", "things", new {page = ViewData["CURRENT_PAGE"]}); %> 
-1

我會通過@RedFilter

/things/list -- HTML 
/things/_list -- return HTML help and examples (more for you than them). 
/things/_list/schema -- schema info 
/things/_list/json -- JSON format 
/things/_list/xml -- XML format 
/things/_list/csv -- csv format 
/things/_list/tab -- tab deliminated format 
/things/_list/wdsl -- implemented soap web service 

等建議的輕微變化/闡述的建議。我覺得這是更具擴展性。它看起來很可怕,但很容易通過基於請求格式的裝飾器傳遞數據內容,使得幾乎所有的文件格式都可用,只需幾行代碼。

這裏是粗概念例如:

public ActionResult _list(string id) 
{ 
    string data = ""; 
    DataTable oDataTable = this.oDAO.Get("list"); // pretend data retrieval 

    try{ 
     if(!String.IsNullOrEmpty(id)){ 
      data = this.oDecorator.FormatData(id,oDataTable); 
      this.ContentTypeChange(id); // change application handler 
     }else{ 
      data = this.GetHelp("_list"); 
     }   
    }catch{} 
    ViewData["data"] = data; 
    return View(); 
} 

...幫助下,可更多的是功能列表,技術的例子,或任何你想要的。當然,您可以從擁有本機JSON開始,並隨着需求增長而添加更多數據格式給您的裝飾器,這很好。對於我的許多項目,它開始時是由AJAX提供純粹的json rest,並且傾向於根據網站流行度綻放爲其他需要的格式,所以我發現這種方法足夠強大,可用於企業環境中,適用於經常增長的小型項目大。