将数据与RESTful API进行比较

Ste*_*eve 5 rest

对于我正在研究定义RESTful API的网站.我相信我(大多数)使用适当的资源URI并正确使用GET/POST/UPDATE/DELETE来获得它.

然而,有一点我无法弄清楚在"REST"中执行它的正确方法是什么 - 比较列表.

假设我有一个书店,顾客可以有一个愿望清单.愿望清单由书籍(其完整的书籍记录,即名称,概要等)组成,并且客户端上存在该列表的完整副本.设计RESTful API以允许客户端查询其本地心愿单的正确性(即了解在服务器端的心愿单上添加/删除了哪些书籍)的好方法是什么?

一种选择是从服务器下载完整的愿望清单并在本地进行比较.然而,这是相当多的数据(由于嵌入的内容),这是一个具有低带宽连接的移动客户端,因此这会导致很多问题.

另一种选择是不下载整个心愿单(即不包括图书信息),而只下载书籍标识符列表.这将不是太多数据(与之前的选项相比),客户端可以在本地比较列表.但是,要获得新添加的书籍的完整书籍记录,必须为每本新书进行REST调用.同样,由于这是一个网络连接不良的移动客户端,这可能会有问题.

第三个选项和我最喜欢的是,客户端将其标识符列表发送到服务器,服务器将其与心愿单进行比较,并返回删除的书籍和添加的书籍数据.这意味着单次往返并且只有必要数量的数据.由于心愿单大小估计少于100个条目,因此仅发送ID将是最小量的数据(~0.5kb).但是我不知道什么样的调用是合适的 - 它不能GET,因为我们发送数据(并将它全部放在URL中感觉不对),它不能像我们那样进行POST/UPDATE不要改变服务器上的任何东西.显然它也不是DELETE.

你会如何实现这第三个选项?

附带问题:你将如何解决这个问题(即为什么选项3愚蠢或者有什么更好的简单解决方案)?

谢谢.

PS:第四种选择是实现更复杂的协议,其中服务器跟踪列表的变化(添加/删除),并且客户端可以例如基于版本标识符或简单地时间戳查询变化.但是,我更喜欢第三种选择,因为在实现方面,它在客户端和服务器上更简单,更不容易出错.

Ras*_*Kaj 0

你的第三个选择听起来不错,但我同意它感觉不太 RESTfull ...

这是另一个可能有效或无效的建议:如果您保留列表的版本历史记录,则可以请求自特定版本以来的更新。这感觉更像是 GET 操作。版本标识符可以是简单的版本号(例如在 svn 中),或者如果您想支持分支或其他非线性历史记录,它们可以是某种校验和(例如在单调中)。

免责声明:无论如何,我都不是 REST 理念或实施方面的专家。

编辑:我加载问题后你有广告吗?或者我只是在写答案之前没有读完你的问题?对不起。不过,我仍然认为版本控制可能是个好主意。