清洁架构:Swift中的网络

我们所有人都在朝着iOS的干净架构迈进,为此,我们一直在尝试许多方法,例如:从MVC迁移到MVVM,以使我们的视图模型独立且易于测试。 诸如ViperMVVM-C之类的更多模式也已经出现,并被开发人员广泛采用。


在本教程中,我们将看到如何使用Restofire编写干净的网络请求。

Restofire是在Alamofire之上编写的面向协议的网络抽象层, 用于以声明方式使用服务


我们将使用来自apiary.io的Notes API — https://rahulkatariya.docs.apiary.io/

分解cURL请求

  1. 主持人 private-07c21-rahulkatariya.apiary-mock.com
  2. 标头Content-Type: application/json
  3. 路径notes
  4. 响应NoteResponseModel的集合

配置Restofire的最佳位置是在didFinishLaunchingWithOptions内部。

设置主机和标头后,它将应用于我们使用Restofire发出的所有网络请求。

您可以全局提供更多配置,例如请求超时,重试代码,重试间隔,最大重试次数,验证,身份验证等。

默认情况下,所有网络响应的类型都是Data但是我们可以根据需要设置自定义响应序列化器。 对于此演示,我们将通过在应用程序内部添加以下代码段来使用JSONDecodableResponseSerializer

通过添加以上代码,我们现在可以将可解码类型用作请求的响应。 让我们为Note响应创建一个可解码的模型。

在Restofire中,每个HTTP请求都是独立的,并由Requestable协议表示,并提供委托方法来处理响应。 委托方法可用于将响应保存在CoreDataRealmUserDefaults内部,或者您可以执行任何自定义操作。 让我们创建第一个网络请求以获取所有注释。

我们已经在AppDelegate全局配置了hostheaders 。 让我们创建NotesGetAllService服务,其path as " notes "response as [NoteResponseModel]

您可能已经注意到,我已经通过侦听响应回调(如下面的代码)在可CoreData内部传递了NSManagedObjectContext ,以将响应结果存储在CoreData中。

现在, NotesGetAllService非常灵活,可以在我们的代码中的任何地方调用,并将响应存储在CoreData中。

AppDelegate设置CoreData之后,我们现在可以请求获取所有注释。

execute方法是Requestable协议的默认实现,该协议发出请求并调用NotesGetAllService的委托方法。

注意:如果您希望响应也随调用一起传递,则还可以在execute方法内传递完成处理程序。

请求完成后,它将保存在CoreData中的注释列表,并且与FRC绑定的NotesTableViewController将自动显示结果。


可以在此处找到功能齐全的演示,包括本文随附的NotePostServiceNoteDeleteService -https://github.com/Restofire/RestofireDemo

快乐网络😎

Restofire / Restofire

Restofire是一个快速的面向协议的网络抽象层,它建立在Alamofire之上以使用服务…

github.com