【问题标题】:ios - How to fetch all the data from RESTful APIs?ios - 如何从 RESTful API 获取所有数据?
【发布时间】:2015-09-10 20:15:07
【问题描述】:

我用很少的资源实现了一个 RESTful API,例如:

/products/
/products/1
/products/2
/categories/
/categories/1
/categories/2
etc.

现在,我被告知应用程序应该主要离线工作,因此我需要从 API 获取所有数据并将其存储在本地。

由于我没有提供单个数据块,但需要调用不同的资源 URI 才能获取所有数据,我想知道这是否是个问题。

这是如何工作的?会有很多 HTTP 调用还是一个调用就可以完成所有工作?

在这种情况下最好的方法是什么?

【问题讨论】:

    标签: ios json api rest caching


    【解决方案1】:

    这些端点本身是什么?

    /products
    /categories
    

    对于那些返回整个集合的人来说,这是一个非常成熟的约定。您甚至可以添加一些请求参数进行过滤等。

    【讨论】:

    • 是的,他们返回整个系列,但 /products/ 中的产品编号 1 的详细信息少于 /products/1。而且,我有很多资源和嵌套资源,我不明白你怎么能下载所有数据以供离线使用:-/
    • 然后你需要另一个端点来返回完整的集合。您不想遍历所有产品/类别 ID 并进行单独的 api 调用。
    • 谢谢。够清楚。
    【解决方案2】:

    每个 URI 代表单一的数据和平。 REST 的主要思想是,我们尝试让 URL 识别资源,然后使用 HTTP 操作 GET、POST、PUT 和DELETE 对他们做事。

    因此,例如,使用 AFNetworking,您可以获得此架构的所有好处。 下载模型可能如下所示:

    1. 通过get请求向服务器请求指定资源
    2. 在后台线程中保存响应
    3. 寻求数据的新和平

    当然,如果您没有能力制作新的端点,它将下载所有存根,您必须为每个单独下载:

    /products/
    /products/1
    /products/2
    /categories/
    /categories/1
    /categories/2
    

    【讨论】:

      【解决方案3】:

      以这种方式设置端点将允许您的应用用户检索单个产品/类别或产品/类别列表。

      这是每个 API 端点在被调用时应执行的操作。

      /products - 返回产品列表
      /categories - 返回类别列表
      /products/:id - 返回具有指定 id 的产品
      /categories/:id - 返回具有具体标识

      就允许应用大部分时间离线工作而言。最好的方法是在客户端(应用程序)端做一些缓存。每次第一次调用这些端点之一时,结果应该存储在客户端的某个地方。下次发出同样的请求时,数据已经被检索到,因此不需要进行网络调用,应用程序将离线工作。但是,第一次调用需要建立网络连接。

      这可以通过字典来实现,其中键是请求(/products、/categories/1 等),值是从 API 请求返回的结果。每次发出请求时,您的应用程序应首先检查数据是否已存在于客户端。如果是这样,则无需进行网络调用即可获取它,只需返回客户端上存在的数据即可。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 2018-08-24
        • 1970-01-01
        • 2021-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多