【问题标题】:Should I send fetch request on each keystroke or store the json data already in json file?我应该在每次击键时发送获取请求还是将 json 数据存储在 json 文件中?
【发布时间】:2020-09-13 13:50:40
【问题描述】:

嘿,我正在使用 api 在我的颤振应用程序中检索 json 数据。一个 api 给了我这样的响应,结果数组包含大约 800 个对象:

{
  "response": "success",
  "results-for": "abcd",
  "results": [
    {
     "name":"value",
    },
    {
     "name":"value",
    },
    .
    .
    .
    . 
]

所以我只想问我应该在每次击键时向 api 发送 fetch 请求,还是应该将 json 数据存储在本地的 json 文件中,我已经从 api 中检索到了。

我想在我的应用程序中显示“名称”键作为我的下拉选项,其中 api 返回给我....

【问题讨论】:

    标签: api flutter


    【解决方案1】:

    一般来说,您应该避免对 API 进行不必要的调用。

    一般来说,您不应该在每次击键时都调用 API。有一个最小字符限制(例如:3)是好的,但除此之外,您还应该实现一个计时器,等待用户输入中断然后进行 API 调用。就像如果一个新字符没有输入超过 300-500 毫秒,则进行 API 调用,如果确实出现了新的击键,则重置计时器。为什么要花那么多时间:link1link2

    话虽如此,您没有提供足够的信息来为您提供针对此特定案例的结论性答案。我不知道有问题的 API 是如何工作的……在某些情况下您无法预取结果,这里有一些:

    • 如果 API 对返回的结果数量有限制,那么可以,您应该继续获取,直到结果集低于限制。

    • 如果 API 从中获取这些结果的数据库经常更新,并且您的用户始终看到最新结果至关重要,那么您应该继续获取。

    • 如果 API 背后的 SQL 不执行通配符搜索,例如必须完全匹配。

    如果我理解正确,结果集总共有大约 800 个对象,我个人会获取一次,然后从我的最后过滤它。您节省了带宽,减少了服务器压力,获得了更好的用户体验:比在用户的互联网连接不稳定的情况下进行许多可能会或可能不会通过的 api 调用更快、更可靠。 编辑:也就是说,如果我确定数据集不会增长太多,否则最少。字符限制:3 & 等待用户停止输入(计时器,300 毫秒),然后再进行 API 调用。

    【讨论】:

    • 嘿,我正在使用 superhero api,并在 TextField 中说用户输入“bat”,然后我想显示与“bat”相关的所有结果,例如“batman”、“batgirl”等,这些已经提供通过 api 和我无关......我只想在我的下拉列表中显示所有相关的结果,以便用户可以从中选择......
    • superheroapi.com/api.php/10217870509586417/search/bat 查看更多详情。只想将与 bat 相关的所有搜索显示为下拉列表,以便用户从中选择
    • 嗯,从我看来你不能一次得到所有的结果,必须提交至少一个字符让 API 做出响应。您可以按字母顺序(/search/name/a 到 /search/name/z)并预取所有内容,但这会很不方便,因为 API SQL 查询看起来像 %search%,所以您最终会得到重复项将不得不过滤掉。无论如何,对于这种情况,我可能只会放一分钟。在进行 API 调用之前,字符数限制为 3 并且延迟(等待用户停止输入)。
    • cdn.rawgit.com/akabab/superhero-api/0.2.0/api/all.json,这里有来自 api 的所有响应。你对此有何看法。我应该将其存储在本地吗?
    • 不错,有一套完整的。那么是的,我当然会在本地存储这个,新的超级英雄不会经常出现,他们也不会经常改变他们的属性:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2021-03-04
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    相关资源
    最近更新 更多