在设计 RESTful API 时,我们遇到了如何访问“同一对象”的不同版本的问题。假设页面对象由唯一键标识并通过 GET /api/page/pagekey 访问。它可以通过发送 PUT /api/page/pagekey 和正文中的适当文档来更新。
现在我们的系统会跟踪页面的旧版本,我们也希望通过 API 访问这些旧版本。让我们假设文档的旧版本是版本 1。似乎至少有两种方法可以设计 API 来访问这个特定版本的页面:
- 获取 /api/page/pagekey/1
- 获取 /api/page/pagekey?version=1
第一个变体将特定版本呈现为其自己的资源;第二个变体为现有资源提供了一个可选的版本上下文。
- 变体 (1) 或 (2) 是更好的解决方案吗?还是有更好的方法来做到这一点?
- 在变体 (1) 中,对不存在的版本号的请求,例如 /api/page/pagekey/7 可能会触发 HTTP 404 Not Found,这很方便。当考虑变体 (2) 时,这是否也是一个有效的状态响应,我们只更改现有资源的上下文“版本”,如果没有版本参数返回 HTTP 200 Ok 响应?