我用很少的资源实现了一个RESTful API,例如:
/products/
/products/1
/products/2
/categories/
/categories/1
/categories/2
etc.
现在,我被告知该应用程序应该主要离线工作,因此我需要从 API 获取所有数据并将其存储在本地。
由于我不提供单个数据块,但需要调用不同的资源 URI 才能获取所有数据,我想知道这是否会成为问题。
这是如何运作的?会有很多 HTTP 调用还是一次调用就能完成所有事情?
这种情况下最好的方法是什么?
这些端点本身就是端点吗?
/products
/categories
对于那些返回整个集合的人来说,这是一个相当完善的约定。 您甚至可以添加一些请求参数以进行过滤等。
每个 URI 代表单一数据。 REST 的主要思想是,我们尝试让 URL 识别资源,然后使用 HTTP 操作 GET、POST、PUT 和删除对他们做一些事情。
因此,例如,使用 AFNetworking,您可以获得该架构的所有优势。 下载模型可能如下所示:
- 通过get请求向服务器请求指定的资源
- 在后台线程中保存响应
- 寻求新的数据和平
当然,如果您没有能力创建新端点,则将下载所有存根,您必须为每个端点单独下载:
/products/
/products/1
/products/2
/categories/
/categories/1
/categories/2
以这种方式设置端点将允许您的应用程序的用户检索单个产品/类别或产品/类别列表。
以下是每个 API 端点在被调用时应执行的操作。
/products
- 返回产品列表/categories
- 返回类别列表/products/:id
- 返回具有指定 id 的产品/categories/:id
- 返回具有特定 id 的类别
就允许应用程序大部分离线工作而言。 最好的方法是在客户端(应用程序)端进行一些缓存。 每次第一次调用其中一个端点时,结果都应该存储在客户端的某个位置。 下次发出相同的请求时,之前已经检索过数据,因此不需要进行网络调用,应用程序将离线工作。 但是,第一次通话需要有网络连接才能进行。
这可以通过字典来实现,其中键是请求(/products、/categories/1 等),值是 API 请求返回的结果。 每次发出请求时,您的应用程序应首先检查客户端是否已存在数据。 如果确实如此,则不需要进行网络调用来获取它,只需返回客户端上存在的数据即可。