JSON操作的MVC命名约定

时间:2009-06-06 11:59:30

标签: json model-view-controller naming-conventions

在编写具有前端和JSON路径的MVC应用程序时,建议使用哪种命名约定?

例如,假设您网站的用户有“事物”。他们应该能够访问页面来查看他们的内容,但我们还需要一种方法将这些内容作为JSON提取回其他页面。我已经能够想到几个选项,但我对其中任何一个都不够兴奋。这就是我所拥有的:

    UI的
  1. / things / list ,JSON的 / json / things - 这需要一个JsonController,最终会提供不同类型的对象,从而击败任何机会在我们开始之前实体分离。
  2. UI的
  3. / things / list ,JSON的 / things / list / json - 可能是我目前的首选,但需要魔术穿线(尽管只是“json” “)。此外,如果您还需要一个(字符串ID)操作签名来获取某些过滤器参数等,那么您可以选择添加额外的路由或进行一些脏字符串拆分。
  4. 用于UI的
  5. / account / mythings ,用于JSON的 / things / list - 更清洁,但可能并不总是有相关的控制器可供您使用“事情“来自。另外,你再次混合实体。
  6. 欢迎所有和任何建议,谢谢!

4 个答案:

答案 0 :(得分:15)

可以说道路名称都可以是相同的。您可以检查客户端所需响应的mime类型的Accept标头,然后根据您在那里找到的内容返回相应的视图:

  • application / json:JSON View
  • text / xml:XML View
  • text / plain,text / html:JSP 图

浏览器将此字段设置为HTML;您的JSON客户端只需根据需要设置此字段。

答案 1 :(得分:1)

任何人都不太可能将请求JSON的URL加入书签,所以我认为保持URL干净并不重要。它也可能以编程方式生成,而不是手动输入。鉴于这些,我会考虑将其添加为查询参数。

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

如果您有ID参数或需要其他参数,这不会破坏您的网址。它也适用于POST和GET。

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

答案 2 :(得分:1)

我使用

的惯例
/things/list -- HTML
/things/_listpage -- AJAX

规则是所有AJAXed操作/视图都有一个前导下划线。这告诉我他们从未被称为顶级,并且通常没有关联的母版页。在这种情况下,我将操作保持在同一个控制器下,以便共享任何相关的逻辑。

通常在列表视图中我会有一个

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

答案 3 :(得分:-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休息,并且往往会根据网站流行度开展其他格式,所以我发现这足够强大,可以在企业环境中用于经常增长的小型项目大。