以RESTful的方式处理有序列表

3
我怀疑如何在RESTful API中处理有序列表是最佳方法。想象以下示例:让我们创建一个LP的图表列表,您想要添加新的LP,删除尚未进入前10名的LP,并更改它们的位置。您将如何在RESTful JSON-API中实现这些方法?
我想到了以下方法:
- GET / 返回有序的图表列表,如 [{ "name": "第一名LP", "link": "/uid123" }, { "name": "第二名LP", "link": "/uid987" }, ...] - GET /{uid} 通过其唯一ID返回LP,返回类似于{"name": "第一名LP", "ranking": 1 }的内容。 - GET /ranking/{position} 访问例如当前排名第一的LP,返回303 See Other和Location-header如Location: /uid123 - POST / 使用请求体 { "name": "我的第一张LP标题" } 创建新的LP,而不指定其当前图表位置。
现在问题是我们如何更改当前的图表位置?可以简单地PUT / {uid} 来更新排名属性,但我认为PUT / ranking / {position} 更自然。另一方面,对使用GET时将返回303 See Other的URI进行PUT是没有意义的。
你认为什么是解决此图表列表问题的最佳方法?我不喜欢仅更改LP数据集中的排名属性的解决方案,因为这可能会导致两个具有相同排名等无意义状态。
2个回答

1

我看到两个问题。1. 设计API最RESTful(美观)的方式是什么?2. 如何确保两个LP不会获得相同的排名?

1: 您的LP可能具有相互关联的几个属性,例如在不同图表上的不同排名。我认为您希望将排名移出LP资源。将排名保留在某个列表中作为单独的资源。例如:

  • GET /LPuid仅返回有关LP的属性,而不是相对属性,如排名
  • GET /billboard/3返回在billboard列表上排名第3的LP的URI。
  • PUT /billboard接受100个LP URI的文档。
  • PUT /billboard/3在该排名处插入一个LP URI并将其他LP向下移动。

2:这与rest无关,无论如何设计API都会遇到此问题。事务是一种解决方案。


0

在您的音乐服务中有两个集合资源。因此,我会设计如下的URI结构:

/ => returns links to collections (ergo itself a collection resource)
/releases => returns a list of LPs
/chart => returns the top 10 LPs, or redirects to the current chart URI

要添加新的LP,您可以使用POST/releases,并使用PUTPATCH定义新图表或更改当前图表,请以/chart格式传输所需的表示形式。

这使您能够定义像/chart/2012-12-25这样的东西,以显示2012年圣诞节当天的排行榜。

我不建议使用PUT /chart/{position}在特定位置插入LP并将其他所有内容向下移动。中介机构不会知道对该URI的PUT导致其他资源更改其URI。这对缓存来说是不好的。

此外,作为用户,我希望您避免使用“billboard”一词,因为其他答案建议。广告牌在人们的脑海中呈现出广告招贴的图片,与排名表无关!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接