RESTful API设计:filter(参数)vs locate(uri)用于关联

时间:2014-04-15 09:49:42

标签: php api rest

我在这两者之间挣扎:

  • /v1/category/{id}/articles
  • /v1/articles?category={id}

由于{id}标识了某个类别,是否应该选择第一个设计总是?这里的混淆是文章:类别不是 N:1 关系,而是 N:M 。 RESTful设计是否有关于N:M关系的指导?


更新:需要考虑的其他方案:我们还为likesave篇文章的用户提供了集合,我们应该如何在这种情况下进行选择?

  • /v1/user/{id}/articles?type=save
  • /v1/articles?user={id}&type=save

1 个答案:

答案 0 :(得分:2)

路径与查询

两个

/v1/category/{id}/articles

/v1/articles?category={id}

是有效的,并且对于另一个没有严格的规则。事实上,两者可以很容易地存在于同一个RESTful应用程序中。

文章类别关系的基数无关紧要,因为这两种方法仅支持一个类别。

如果你想喜欢一篇文章,请使用你POST的资源。

POST /likes/articles/1234

身体

{
  "user": "Joe"
}

会为文章Joe创建用户1234的新内容。你可以GET喜欢一篇文章:

GET /likes/article/1234

可以返回

["Joe", "Jane"]

如果JoeJane都喜欢这篇文章。

保存

保存更改现有文章,请在其上使用PUT新表示。

PUT /article/1234

身体

{
  "title": "The Article Title",
  "content": "What the article is about"
}

当HTTP谓词存在时,请勿使用save等查询参数。