如何以RESTful方式获取复杂的记录子集



我有一个问题,就是从RESTful服务中获取"随机"的可用内容块,而不复制客户端已经缓存的内容。我怎样才能以RESTful的方式做到这一点?

我提供了大量的项目(带有文本和URL的小文章)。让我们假设它是:/api/文章/

我的(软件)客户希望获得可用内容的随机块。太多了,无法将它们全部加载到客户端上。他们没有一个自然的秩序,所以在这种情况下,他们不能只要求最新的。相反,客户可能会给出大约6-10个属性来"提示"他们想看什么类型的文章(例如流行、最近、趋势…)

随着时间的推移,客户端获得了越来越多的内容,但在服务器上,我不知道他们已经拥有了什么,而且因为它们是随机发送的,我不能只传递他们拥有的"最新"内容。

可以想象,我可以发送本地存储的GUID。客户端仅在本地存储50-100。它足够小,可以填充到POST变量中,但不能填充到GET查询字符串中。

有什么干净的设计方法?

要点:

  • 数据没有逻辑顺序
  • 客户端必须在本地缓存内容
  • 每个项目都有一个GUID
  • 希望避免删除重复项

如果数据真的按随机顺序保存(请记住Dilbert RNG效应),你将永远无法令人满意地完成这项工作;你需要为一个特定的客户修改订单,这样他们才能正确地浏览它。不过这很容易做到;只需将特定的排序本身作为一种资源;此时,您已经获得了一个自然的(如果可能是合成的)排序,并且可以使用普通的分页技术。

需要注意的主要问题是,在执行初始查询时,您将创建一个资源来响应GET:您可能应该使用一个资源名称,该名称是查询参数的散列(如果重要的话,包括客户端的身份),这样,如果有人连续执行两次相同的查询,他们将获得相同的资源(因此保持适当的幂等性)。您总是可以在超时后删除资源,而不需要手动处理…