Tag: Ios网络

实验:iOS网络缓存

现在一段时间以来,我一直在进行网络架构方面的实验。 我已经按照自己的喜好构建了一个,它提供了灵活性和可读性。 我缺少的第一步是持久层。 具有强大的持久层,随后对同一网络资源的调用可以依赖于存储的数据,而不是浪费数据和时间。 对我们来说幸运的是,如果您使用URLSession则默认配置已使用NSURLRequestUseProtocolCachePolicy 。 它是这样的: 如果没有存储响应,它将从网络中获取内容。 如果存储了一个响应并且它是有效的,它将使用该响应。 如果存在已存储的响应并且该响应无效,它将从网络获取以使用并也会更新已存储的响应。 除了存在一个问题外,它还很整洁:并非所有服务器都能正常运行并提供cache header 。 没有它,它将不会存储在缓存中。 我们还有另一种情况,其中存在高速缓存头,但表示为: no-cache 。 在大多数情况下,我们应该尊重所提供的缓存控制标头,因为服务器应该知道最适合它们所提供的内容。 我遇到了Hacker News Top Stories Endpoint的no-cache标头,这很有意义,因为它是根据投票不断变化的新闻列表。 这就是该帖子被称为“ 实验”的原因。 虽然可以使用,但我不建议在生产应用中使用它。 有更好的缓存数据的方法,但是如果您急于需要快速的默认缓存,则可以选择这种方法。 在本实验中,我使用了https://hacker-news.firebaseio.com/v0/topstories.json端点。 单个请求: 我试图对同一网络资源执行多个请求: 然后使用缓存头修改获取相同的资源100次:

街区有一个新的iOS网络库

正如任何iOS开发人员所知,网络是任何移动应用程序的重要组成部分。 当苹果公司在iOS 7中引入URLSession时,社区就敞开了怀抱。 新的API是对旧版URLConnection API的重大改进。 在Bottle Rocket,我们始终在为客户构建应用程序时试图在效率与可维护性之间寻求平衡。 因此,我们通常会直接在URLSession上从头开始编写网络代码。 从可维护性的角度来看,这非常好-使我们的网络代码与Apple的SDK保持同步非常容易。 但是,随着我们的成长,我们意识到经常需要重复编写一些通用的样板化网络代码。 我们决定编写自己的解决方案,而不是使用第三方解决方案(其中许多解决方案非常繁琐)。 我们最近以Apache 2.0许可在GitHub上开源了Hyperspace。 在构建Hyperspace时,我们有一些目标: 减少您需要手工编写的HTTP模板。 这包括定义HTTP方法,状态代码和标头之类的内容。 保持轻巧—开箱即用即可轻松便捷地处理90%的网络用例。 这包括指定您希望从请求中获取的模型类型,以便可以使用Swift 4的Codable协议的魔力自动对其进行解析。 保持简单-我们想让任何人都容易做出贡献。 整个图书馆约为600个SLOC。 将超空间添加到您的项目 将Hyperspace添加到项目中后,您将立即启动并运行。 只需将Hyperspace添加到您的Podfile中(不久将添加对其他依赖项管理器的支持): 吊舱“超空间” 定义网络请求 定义请求很简单。 只需创建AnyNetworkRequest的实例并指定您的请求参数: 让someRequest = AnyNetworkRequest (方法:.post, url:URL(string:“ …”)!, 标头:[。contentType:.applicationJSON], 正文:postBody) 注意, Model是指您的请求的成功模型响应类型。 这意味着,如果您请求的响应类型符合Decodable ,我们将为您自动处理解码。 还要注意, method和headers参数依赖于预定义的类型。 不再有容易出现拼写错误的“字符串型” API! 执行网络请求 BackendService的工作就是执行您的网络请求。 只需创建一个BackendService ,然后调用其execute()方法即可: 让backendService = BackendService()backendService.execute(request:someRequest){(结果)在 切换结果{ case .success(让responseObject): //请求成功 […]