RESTful API—如果记录';使用分页获取数据时计数是否增加?

RESTful API—如果记录';使用分页获取数据时计数是否增加?,rest,api,pagination,restful-architecture,restful-url,Rest,Api,Pagination,Restful Architecture,Restful Url,假设我需要从RESTful API服务器检索所有产品 所以我打电话,检索到所有的产品 但是,不幸的是:-),在这个过程中,添加了一个新产品,在我检索产品时,产品的数量增加了 我如何处理这个问题? 我想,根据产品是否添加到第一页/最后一页,我可能会幸运地在过程中检索到它,但如果我使用某种元数据来表示产品的数量,例如: { "_metadata": { "page": 5, "per_page": 20, "page_count": 20,

假设我需要从RESTful API服务器检索所有产品

所以我打电话,检索到所有的产品

但是,不幸的是:-),在这个过程中,添加了一个新产品,在我检索产品时,产品的数量增加了

我如何处理这个问题? 我想,根据产品是否添加到第一页/最后一页,我可能会幸运地在过程中检索到它,但如果我使用某种元数据来表示产品的数量,例如:

  {
  "_metadata": 
  {
      "page": 5,
      "per_page": 20,
      "page_count": 20,
      "total_count": 521,
      "Links": [
        {"self": "/products?page=5&per_page=20"},
        {"first": "/products?page=0&per_page=20"},
        {"previous": "/products?page=4&per_page=20"},
        {"next": "/products?page=6&per_page=20"},
        {"last": "/products?page=26&per_page=20"},
      ]
  },
  "records": [
    {
      "id": 1,
      "name": "Widget #1",
      "uri": "/products/1"
    },
    {
      "id": 2,
      "name": "Widget #2",
      "uri": "/products/2"
    },
    {
      "id": 3,
      "name": "Widget #3",
      "uri": "/products/3"
    }
  ]
}
我的应用程序会注意到,并非所有产品都在流程结束时检索到


谢谢

请注意,我不认为restful环境中的要点或您的问题与非restful环境中的答案不同

如果我理解正确,您希望按照某些标准选择项目,例如“全部”,翻阅这些选定的项目,如果在翻页过程中选择的项目会增加或变小,您希望对此做出反应

您的restapi将有一些方法

  • 指定选择,例如“全部”
  • 指定当前记录指针,例如“第5条记录”
  • 处理有关总计数和页面的信息,例如3页上有15条记录当前第1页上的第5条记录(在您的场景中,这不必是restful url的一部分)
我将把问题分为三个部分:

  • 跟踪选择
  • 分页
  • 指向当前记录的指针
  • 跟踪所选内容

    最糟糕的情况是,在当前记录被删除后,您失去了指向该记录的指针,因此您的问题也与您可以通过以下方式解决的事务性问题有关

  • 锁定当前记录
  • 锁定当前页面的所有记录
  • 锁定整个选择
  • 锁定用户选择的记录
  • 这些方法的可行性在很大程度上取决于 锁定记录集发生更改的概率有多高。锁定记录集越小,概率明显越低。即使锁定在技术上可行,它也必须有意义。例如,在任何类型的预订系统中,选项4“锁定用户选择的记录”是避免删除相关记录所需的

    添加和删除的记录首先通过跟踪选择来检测。这里的问题是,您需要哪些数据来跟踪更改。以下方法涉及不同的“成本”:

  • 仅获取所有记录的计数-对于分页来说,这可能就足够了,但可能会发生这样的情况:删除和添加的记录数量相同,计数保持不变,但某些相关/选定的记录发生了更改,这对用户来说很烦人
  • 获取所有修改记录(id、排序位置、修改日期、删除/添加日期和记录标题)的更改数据,并通过将修改添加到要显示的标题列表来跟踪当前分页
  • 获取所有修改记录的所有数据,并通过同步机制和缓存跟踪完整列表
  • 获取所有记录的所有数据
  • 选项4是最简单但成本最高的方法,对于大型选择不可行

    分页

    你会发现很多关于这个话题的问题和答案

    指向当前记录的指针

    如果选择有添加和删除,您的“当前记录”可能会更改,其中包括上面讨论的“无效/删除”选项。此外,您当前的记录可能会出现在另一页上。至少对于用户来说,看到这些变化的体验并不理想,但处理这种情况肯定是可行的

    例如。 假设我们在3页上选择了15条记录,每条记录有5个条目。用户处于15条记录中的第5条(第1页上的最后一项),他按下“下一步”,并希望以记录6结束第2页。与此同时,现在有17项记录。1在第1页和第2页上被删除,其中添加了第4页。用户将停留在第1页,因为其排序号为5的记录仍有排序号5