Her*_*ine 14 parameters rest version restful-url restful-architecture
在设计RESTful API时,我们遇到了如何访问"同一对象"的不同版本的问题.让我们说一个页面对象由唯一键标识,并由GET/api/page/pagekey访问.它可以通过发送PUT/api/page/pagekey和正文中的相应文档来更新.
现在,我们的系统会跟踪我们还希望通过API访问的旧版本页面.让我们假设该文档的旧版本是版本1.似乎至少有两种方法可以设计API来访问该特定版本的页面:
第一个变体将特定版本呈现为自己的资源; 第二个变体为现有资源提供可选的版本上下文.
每个资源URL都应该是一个永久链接来标识该资源.
GET /api/page/{id}/{rev}
Run Code Online (Sandbox Code Playgroud)
这肯定是特定版本资源的永久链接.所以,没关系.但请注意,固定链接不要求内容随时间变化相同:
GET /api/page/{id}
Run Code Online (Sandbox Code Playgroud)
这将返回最新版本,这是很好的,将随着时间的推移改变内容.为了扩展它,你甚至可以拥有这样的时间资源并且是RESTful:
GET /api/page/latest
Run Code Online (Sandbox Code Playgroud)
但是,/api/page/{id}?version={rev}也将工作,并没有打破任何RESTful概念.
我认为/{id}/{rev}它有点纯粹,因为它专门识别可寻址网址中的资源,并且感觉比把它变成一个参数更正确.原因是params应该是关于如何检索内容的修饰符,而不一定要改变你正在检索的不同资源.在您的情况下,由于每个版本都是不同的,因此更清楚地解决资源似乎更合适.但是,即使那个没有破坏任何RESTful网址规则或概念,如果你问10个人你可能得到一个不同的答案:)
无论哪种方式,您都应该确保时态资源/api/page/{id}返回最新版本.
几乎根据定义,REST 没有“同一对象”的概念。如果您的协议中需要这个,那么您将需要某种“标识符”。就如此容易 ;)
URL 参数是一种显而易见的方法。“/1”或“?version=1”当然是两个不错的选择 - 您选择哪个只是一个偏好问题(以及您可能还想要多少“其他东西”的问题)。
无论哪种方式,您仍然必须应对“版本未找到”类型的错误,并优雅地恢复。
恕我直言...
| 归档时间: |
|
| 查看次数: |
1831 次 |
| 最近记录: |