如何允许客户端在REST API的上下文中检索资源的所有可能属性?

时间:2011-05-26 19:04:10

标签: api rest resources

我正在设计我的第一个RESTful API(使用超媒体约束)。

我不确定我是否正确地提出了问题,但这是一个例子。

假设我有一个产品资源:

/products/{id}

响应中有一个product_type元素。

可能的产品类型包括(行业特定的)

  1. 楼层显示
  2. 转储显示
  3. 轻量级
  4. ...
  5. 我的问题是,客户端检索产品资源的所有可能属性的最佳方法是什么?

    我考虑过暴露“元数据”子资源。例如:

    product/metadata/type
    product/metadata/status
    product/metadata/material
    product/metadata/color
    

    ...对于包含N个项目的每个属性。

    我担心我的解决方案与产品系列紧密耦合。我限制可以在另一个上下文(集合)中使用的属性列表。

    另一种选择是提供包含所有可能属性的元数据集合,但我不确定这是否是处理它的最佳方式。

    任何指针都将非常感激。

1 个答案:

答案 0 :(得分:1)

如何简单地将元数据作为该资源上的GET的一部分返回?

例如,如果我获取/products/123,我可能会在响应中收到以下有效内容(假设为JSON媒体类型):

{
   "type" : "Floor Display",
   "color" : "Blue",
   "material" : "wood",
   ...
}

等等。现在,如果您需要有关每个属性的更多信息,那么您可以使每个属性成为从属资源并返回URI,而不是我上面列出的简单值。

编辑:

现在,如果您想让客户端了解所有可能的值,那么应该在您的响应之外指定,作为媒体类型文档的一部分。将这种“模式”信息放入您的回复中并没有用。

同样,HTTP响应可以返回200,404,503等代码,但响应不会列出所有可能的代码,也不会定义它们的语义。相反,这是HTTP规范的工作。

我会采用相同的方法,在API文档中定义媒体类型的结构和语义,并仅传输与响应相关的值。我想不出将所有可能的值直接包含在响应中的任何好处。