网址样式:为什么我只使用ids + slug名称(“/ products / [id] - [product-name]”)而不是slug名称(“/ products / [product-name]”)?

时间:2013-04-17 15:27:55

标签: web-services rest url

首先关于我的产品列表的一些细节:

  1. 静态,包含约400项。
  2. 它不会再增长。相信我这个。
  3. 没有重复的项目名称。
  4. 产品属性不会改变。
  5. 基本上将我的产品列表视为元素周期表。我没有看到任何关于使用“slug name”(或称为任何名称)将URL添加到URL的问题。我宁愿拥有一个干净的SEO友好URL。我有什么东西在这里俯瞰吗?

3 个答案:

答案 0 :(得分:4)

以下是关于ID和slug名称的事情:

使用“product-id”:

通常,URL使用ID设计:

"/products/[product-id]"
example: /products/213

但它们对于该URL中的确切内容的描述太少(我的意思是,不同的URL将具有不同的ID,但仅此一点 - 仅通过查看它 - 不会向您提供有关该特定URL的任何信息。)

Botoom专栏:仅限ID是错误的,因为它几乎没有描述性。

使用“产品名称”:

使用:

"/products/[product-name]"
example: /products/three-legged-walking-oven

实际上非常好,警告是:

  • 您如何将[product-name]映射到[product-id]
  • 标题(或[product-name])会发生很大变化,如果有人为旧标题添加书签会怎么样?

使用“[product-id] / [product-name]”:

使用:

"/products/[product-id]/[product-name]"
example: /products/213/three-legged-walking-oven
or
"/products/[product-id]-[product-name]"
example: /products/213-three-legged-walking-oven

在此方法中,您可以通过网址的id部分获取产品。

为您提供两全其美:描述性网址和易于映射的网址和标题(名称)可以更改而不会使旧网址无用。

您的方案:

因此,如果您100%确定您永远不会更改产品名称,则可以继续使用“产品名称”。只需找到一种方法,以有效的方式将“产品名称”映射到“产品ID”。

加分:请务必查看this nice article有关使用slug名称和搜索引擎的重要性。

答案 1 :(得分:1)

由于网址末尾的内容是您的应用在数据库中查找产品所使用的内容,因此会变成数据库问题。将ID保存在网址中可让您的应用通过ID查找内容。

如果您的产品名称永远不会更改,并且您实际上可以将产品名称用作数据库中的主键(或至少在列上具有唯一索引),那么您可能只使用产品您的网址中也有名称。

通常情况下,最好将一个唯一的无意义的字段作为主键,因为在大多数情况下,产品名称之类的内容往往会发生变化,即使只是为了解决拼写错误。

答案 2 :(得分:0)

我能想到的唯一原因是使用/ products / [id] - [name],你需要知道id和[name],要使用第二个选项你只需要知道名字

这里更常见的选择是使用:/ products / [id]

我只考虑/ products / [name]如果您确信名称是:短,唯一,不包含任何特殊字符(&,?#,/,...)