【问题标题】:Restful Url pattern宁静的 URL 模式
【发布时间】:2012-06-02 23:45:09
【问题描述】:

假设我有如下网址,例如

  1. http://www.company.com/categories # 列出所有类别
  2. http://www.company.com/categories/car # 列出所有汽车
  3. http://www.company.com/products/303 # 唯一 id = 303 的汽车

我的问题是,对于 2.http://www.company.com/categories/car,如果我使用它的复数形式会更好吗?

例如

http://www.company.com/categories/cars

【问题讨论】:

  • 定义“更好”——对谁/什么目的更好?
  • @Widor,我的意思是更标准,因此更安静
  • 这是一个与代码相关的问题吗?如果我正确理解了您的问题,似乎没有。

标签: api http url rest permalinks


【解决方案1】:

为了使 2. 更像一种 RESTful 模式,您将发出一个 GET 请求来检索汽车列表。

在这种情况下,使用复数是有意义的:

http://www.company.com/categories/cars

这为使用特定(单一)汽车记录扩展它留下了可能性:

http://www.company.com/categories/cars/ferrari

【讨论】:

  • 你说得很好!那么,为什么不company.com/categories/cars/ferraris?如果我有更多的类别,例如 Luxury、Coupe 等。在我看来,如果一个类别没有更多的子类别,单数也有意义,但由于我们无法预测未来,所以总是复数更灵活。
  • 好吧,如果您想将 Ferraris 作为汽车类别并返回许多型号,那么您可以将其多元化,这仍然有意义。但是对于只返回一条记录的任何东西(Person 将是一个更好的例子)然后坚持使用单数。
【解决方案2】:

如果您使用复数表示您的资源是正确的。但是,如果您使用这样的 url,它就不会被称为 Restful:

 http://www.company.com/categories/cars

因为汽车是类别的子资源...所以为了更好,我建议您应该将汽车资源公开为特定类别的子资源:

 http://www.company.com/categories/123/cars #get all cars under category which id = 123

【讨论】:

  • 这不是查询字符串的设计目的吗?即GET http://www.company.com/cars?category_id=123 # get all cars with category id = 123.
  • 是的,您也可以使用它。但是,上面的问题并没有谈到查询字符串。
【解决方案3】:

这完全取决于您和您的应用程序。如果您有许多 REST 服务,您也可以使用 carList 代替 car 或 cars。这是有道理的,而且更少混乱。确保在所有 REST URI 中保持统一。

【讨论】:

    【解决方案4】:

    将其视为 Windows 资源管理器目录。如果您在本地文件夹中组织汽车,那么法拉利会在哪里?

    另一件要考虑的事情是专门为 PUT 和 POST 请求设计 URI,因为你有更多的名词和更少的动词。

    【讨论】:

      【解决方案5】:

      复数。 url 中的“汽车”元素应反映类别的名称。根据我的经验,类别的名称通常是复数,因为它们标识了一组多个实体。例如:交通工具的类别是:汽车、飞机、自行车和滑板。

      某物是汽车,属于“汽车”类别。

      很好的例子是维基百科中集合类别的命名约定:

      集合类别以类命名(通常以复数形式)。例如,Category:Cities in France 包含主题为法国城市的文章。

      https://en.wikipedia.org/wiki/Wikipedia:Set_category#Set_category

      【讨论】:

        【解决方案6】:

        一个类别包含很多项目。所以,是的。 汽车会比汽车

        更有意义
        http://www.company.com/categories/cars/mitsubishi/lancer (if you have more categories)
        

        http://www.company.com/categories/cars/lancer
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-28
          • 1970-01-01
          • 1970-01-01
          • 2011-07-21
          • 2010-09-22
          • 2010-12-18
          • 1970-01-01
          • 2011-01-26
          相关资源
          最近更新 更多