2009-06-06 86 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,并且倾向于根据网站流行度绽放为其他需要的格式,所以我发现这种方法足够强大,可用于企业环境中,适用于经常增长的小型项目大。