【问题标题】:How to return all pages instead of only 1st如何返回所有页面而不是仅返回第一页
【发布时间】:2016-03-26 11:53:07
【问题描述】:

我正在查询 URI 以从 Web 服务获取一些数据。没关系。 但我注意到我的 json hase page_count 有多个页面,但只返回第一页数据。

这是 json 的样子:

{
  "last_item": null,
  "total_items": "201",
  "first_item": null,
  "page_number": "1", **<-- THIS IS 1ST PAGE**
  "page_size": "10", 
  "page_items": null,
  "search_time": "0.045",
  "page_count": "21",  **<-- THERE IS 21 PAGES IN TOTAL**
  "cars": {
    "car": [
      { ... },
      { ... },
      ...
      ...
      ]
   }
}

如何返回所有页而不是只返回第一页?我知道这可能不是一个好主意,但我该怎么做呢?

更新: Web 服务的 URI 类似于:

http://<api_address>.com/json/cars/search?app_key=<api_key>&c=music&location=32.263569,-111.9847682

谢谢,

【问题讨论】:

  • 您能否提供更多关于您的查询方式的信息?
  • @ebeeb 添加了更新部分。谢谢ebeeb
  • 在不知道您所针对的 API 的情况下,很难猜测您将随请求发送哪些参数以调整结果。这个问题可能对stackoverflow.com/questions/12168624/…有帮助。
  • 请参阅 API 文档,如果这可能的话...
  • 如果您提供站点名称或者您必须查看他们的文档,那就太好了。如果不查看适当的文档,有人如何回答您的问题。

标签: c# json uri paging


【解决方案1】:

我看到您正在使用应用程序密钥。

所以我猜你正在使用的 API 以某种方式限制了查询量每个查询的数据量。

我可以想象您使用的查询总是只返回 一个 页的数据,以及可用的总页数,让您知道还有多少页可用。

我猜如果你不指定你希望查询默认返回第一页的页面。

更新

因此,如果您无法将每个查询的页面大小设置为大于 50,这是您(可能)无法更改的 API 端限制。

这意味着在客户端上您需要多次查询。有多种方法可以做到这一点,但你应该问问自己是否想要这个。

您真的需要一次触手可及的所有这些数据吗? 客户端带宽使用可能会急剧增加。 如果突然汽车数量如此之多以至于您的内存不足,会发生什么? 如果每个应用程序密钥的 API 查询在某种程度上受到数据量的限制,那么请求的数量(再次以各种方式,我不知道您使用的是什么 API)也会不必要地增加 API 上的工作量。

如果有的话,也许可以深入研究 API 的文档。可能还有其他查询完全符合您的要求,但可能尚未包含有关“汽车”的所有详细数据,而是包含一些元数据。

【讨论】:

  • 正确,我使用 api-key 并且查询总是返回第一页。我知道我可以使用 page_size=50 设置每页的项目数(设置为每页 50 个项目),并且我知道如何移动到第 3 页(page_number=3)。但是我如何一次全部返回?谢谢ebeeb
  • 我可以设置page_size,也可以设置page_number。因此,如果我将 page_size 设置为 10 并且结果总数为 23,我可以设置 page_number=1 来获得前 10 个结果,然后 page_number=2 来获得接下来的 10 个结果,而 page_number=3 来获得最后 3 个结果(因为 23 在全部的)。我也可以将 page_size 设置为 30 以获得所有 23 个结果,但我知道你在说什么,这不是一个好方法。所以,你是对的,我猜我应该发出多个请求来获取第一页 1,然后是第 2 页,最后是最后一页。我想这是做这种事情的正确方法?
  • 这取决于 API。想象一下,如果你有 2300 辆汽车。您可以请求 page_number=1 和 page_size=1,因此您在第一次请求时只会收到非常少的数据。然后你会看到总共有 2300 页,在这种情况下等于 2300 辆汽车。现在您可以使用 page_number=1 和 page_size=2300 进行查询。
  • 我明白了,比归还所有 2300 辆汽车更好,更好的方法是将 page_size 设置为 10(汽车),然后在第一页中,获取 page_count(在这种情况下为 23)然后循环 23 次以获得所有 23 页。这是正确的方法吗?也许也可以异步执行,以便数据一旦可用就开始显示?
  • 正确的方法在很大程度上取决于您的需求。更具体地说,想象一下在手机上滚动浏览汽车,它可以同时显示 7 辆汽车,您可能希望以一次请求 20 辆汽车的方式实现它。一旦第 10 辆车进入视野,您就请求接下来的 20 辆车,以免用户等待。当请求和滚动正在进行时,执行此异步可防止所有内容冻结。保持请求的数据较小对于客户来说很重要,因为这样可以防止他们的电话帐单飞涨。
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2018-08-27
  • 2013-07-19
  • 2018-12-18
  • 1970-01-01
  • 2018-12-07
  • 2011-04-20
相关资源
最近更新 更多