如何使用交叉模型设计RESTful?

时间:2012-01-27 09:38:09

标签: rest

我正在尝试使用RESTful开发在线购物网络服务。但是,我对此很新,我不知道如何设计它。

这是我的模特:

  • 用户:包括姓名,电子邮件,电话号码等
  • 产品:包括其名称,标签及其所属的类别。 (我设计了两种类型:MainCategory和SubCategory,其中SubCategory属于MainCategory)。

现在我对产品有以下需求:

  1. 列出MainCategory M
  2. 下的所有产品
  3. 列出MainCategory M和SubCategory S
  4. 下的所有产品
  5. 列出所有产品属于用户A
  6. CRUD与product_id
  7. 的产品

    以下是关于上述情况的问题:

    1. 列出MainCategory M下的所有产品
      • 我应该使用/ products / M或/ MainCategory / M列出所有产品吗?
    2. 列出MainCategory M和SubCategory S下的所有产品
      • 我应该使用/ products / M / S还是其他方式?
    3. 列出所有产品属于用户A.
      • 我应该使用/ user / A / products或/ products /?user = A还是其他方式?
    4. 带有pid的产品的CRUD(product_id)
      • 这是对的吗? /产品/ PID
    5. 此外,如果我需要排序或添加一些限制该怎么办? 例如:

      • 列出MainCategory M下的所有产品,按时间顺序排列
        • 是这个/ products / M?order = time_asc?

      感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您已获得主要资源:

/users/{id}
/products/{id}

这两者之间的关系应该是通过链接,因为在没有引用另一方(用户不是产品所有,或者反之亦然)的情况下思考它们是完全合理的。使用常规CRUD技术处理这些资源,并考虑复杂属性的子资源。

然后你就有了分类系统。这也很好地建模为资源:

/category/{name}
/category/{name}/{subname}

这里的一个关键区别是你不需要在类别上支持除GET之外的任何操作;那里的信息(该类别的成员列表)实际上是根据产品的权威信息合成的。您希望允许人们限制列表返回的信息集(例如,有限范围,不同排序),这是通过GET上的参数完成的。类别成员列表应该是相关产品资源的链接列表。

如果您支持用户分类,请将其作为单独的资源,并注意添加适当的安全限制;只有获得授权的人才能看到那种东西。