当前位置: 首页 > 知识库问答 >
问题:

RESTful API设计中的分页问题

梁存
2023-03-14

我正在为正在开发的移动应用程序设计RESTful API。我的问题是包含许多项目的大型集合。我知道一个好的做法是在集合中对大量结果分页。

我已经阅读了Facebook Graph API文档(https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2),推特光标文档(https://dev.twitter.com/overview/api/cursoring),GitHub API文档(https://developer.github.com/v3/)以及本文(API分页最佳实践)。

考虑我的API中的一个示例集合,该集合包含100个名为resource1到resource100并按降序排序的项。这是您将在get请求时得到的响应(gethttp://api.path.com/resources?limit=5):

{
    "_links": {
        "self": { "href": "/resources?limit=5&page=1" },
        "last": { "href": "/resources?limit=5&page=7" },
        "next": { "href": "/resources?limit=5&page=2" }
    },

    "_embedded": {
        "records": [ 
            { resource 100 },
            { resource 99 },
            { resource 98 },
            { resource 97 },
            { resource 96 }
        ]
    }
}

现在我的问题是这样一个场景:

1-我GET/资源具有上述内容。

2-之后,资源集合中添加了一些内容(例如,另一个设备为该帐户添加了新资源)。现在我有101个资源。

3-我GET/资源?限制=5

{
    "_links": {
        "self": { "href": "/history?page=2&limit=5" },
        "last": { "href": "/history?page=7&limit=5" },
        "next": { "href": "/history?page=3&limit=5" }
    },

    "_embedded": {
        "records": [ 
            { resource 96 },
            { resource 95 },
            { resource 94 },
            { resource 93 },
            { resource 92 }
        ]
    }
}

如您所见,资源96在两个页面中重复出现(或者,如果在步骤2中删除了一个资源,则可能会发生类似的问题,在这种情况下,将丢失一个资源)。

因为我想在一个移动应用程序和一个列表中使用它,所以我必须将每个API调用的资源附加到它之前的那个API调用,这样我才能有一个完整的列表。但这令人担忧。如果你有什么建议,请告诉我。提前谢谢你。

P、 S:我考虑过类似时间戳的查询字符串,而不是基于光标的分页,但这会在其他地方给我带来问题。(如果您需要更多信息,请告诉我。)


共有2个答案

丌官瀚
2023-03-14

为什么不维护一组可见的资源?

然后,在处理每个响应时,可以检查资源是否已经呈现。

申昌勋
2023-03-14

我们刚刚通过REST API为移动应用程序实现了类似的功能。移动应用程序传递了一个额外的查询参数,该参数表示页面中的元素“冻结”的时间戳。

所以您的第一个请求看起来像是获取/资源?限制=5

如果移动应用程序想要区分“软”页面(保留第1页请求的时间戳)和“硬刷新”页面(将时间戳重置为当前时间),那么它也可以进行控制。

 类似资料:
  • thinkphp5编写的restful风格的API,集API请求处理,权限认证,自动生成文档等功能

  • 本文向大家介绍asp.net中的GridView分页问题,包括了asp.net中的GridView分页问题的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net中的GridView分页问题。分享给大家供大家参考。具体分析如下: 在ASP.NET中,经常会使用到GridView的分页,一般情况下,若使用Visual Studio自带的数据源控件,不会出现什么问题。 但是如果自己用代码

  • 1、如何看待流行趋势 我觉得设计趋势是设计师必须要时刻关注的,比如最近的VR技术、3D的设计手法以及多彩的设计语言,但是我们设计师不能盲目的去追求所谓的流行趋势,我们需要根据我们产品自己内在的属性,去打造差异化的设计方案 2. 如何看待加班 觉得项目上的需要,设计师是一定需要去积极的加班配合,与此同时我也需要去提高自己的工作效率,尽量做到少加班 3. 你的缺点是什么 我的缺点就是我的收回能力有些不

  • 1、你的职业规划是什么 成为一名更优秀的设计师,到一家稳定的企业、优秀的团队,不断提升自己的能力 工作年限多的人,可以说去一家公司体现自己的价值 注意:不要说什么成为全链路设计师,不要说自己是全链路设计师,会被鄙视,这里我不做解释 2、你的优点/缺点是什么 多准备几个优点,可以从性格、工作、学习层面来讲 尽量找到证据论证优点,比如你说自己爱学习,那么你平时都去哪学、学习频率是什么 不要暴露自己的缺

  • 创建一些文章 首先,为了能展示我们的效果,我们先在后台创建几篇文章,例如如下: 安装分页插件 列表性质的页面一般都需要做分页处理,这个工作要是让我们自己处理是十分繁琐的,所以我们利用symfony2的扩展knp-paginator-bundle。 修改app/AppKernel.php文件,增加如下注册语句: new Knp\Bundle\PaginatorBundle\KnpPaginator

  • 问题内容: 您如何处理在Java中仅具有单一继承的问题?这是我的具体问题: 我有三个(简化的)课程: 这是我认为最基本的实现,但是我想进行其他实现。 可以说我想添加一个新的变量,比如wordLength,但是我想使用继承来添加它。意思是我不想修改那个原始的AbstractWord类。即与此类似: 我知道java不允许我这样做,但是它使我的代码非常难看。现在,每当我添加一个字段时,我都将其添加到Ab