清洁架构:Swift中的网络
我们所有人都在朝着iOS的干净架构迈进,为此,我们一直在尝试许多方法,例如:从MVC迁移到MVVM,以使我们的视图模型独立且易于测试。 诸如Viper和MVVM-C之类的更多模式也已经出现,并被开发人员广泛采用。
在本教程中,我们将看到如何使用Restofire编写干净的网络请求。
Restofire是在Alamofire之上编写的面向协议的网络抽象层, 用于以声明方式使用服务
我们将使用来自apiary.io的Notes API — https://rahulkatariya.docs.apiary.io/
分解cURL请求
- 主持人
private-07c21-rahulkatariya.apiary-mock.com
- 标头 –
Content-Type: application/json
- 路径 –
notes
- 响应 —
NoteResponseModel
的集合
配置Restofire的最佳位置是在didFinishLaunchingWithOptions内部。
设置主机和标头后,它将应用于我们使用Restofire发出的所有网络请求。
您可以全局提供更多配置,例如请求超时,重试代码,重试间隔,最大重试次数,验证,身份验证等。
默认情况下,所有网络响应的类型都是Data
但是我们可以根据需要设置自定义响应序列化器。 对于此演示,我们将通过在应用程序内部添加以下代码段来使用JSONDecodableResponseSerializer
。
通过添加以上代码,我们现在可以将可解码类型用作请求的响应。 让我们为Note响应创建一个可解码的模型。
在Restofire中,每个HTTP请求都是独立的,并由Requestable协议表示,并提供委托方法来处理响应。 委托方法可用于将响应保存在CoreData或Realm或UserDefaults内部,或者您可以执行任何自定义操作。 让我们创建第一个网络请求以获取所有注释。
我们已经在AppDelegate
全局配置了host
和headers
。 让我们创建NotesGetAllService
服务,其path as " notes "
, response as [NoteResponseModel]
您可能已经注意到,我已经通过侦听响应回调(如下面的代码)在可CoreData
内部传递了NSManagedObjectContext
,以将响应结果存储在CoreData
中。
现在, NotesGetAllService
非常灵活,可以在我们的代码中的任何地方调用,并将响应存储在CoreData中。
在AppDelegate
设置CoreData
之后,我们现在可以请求获取所有注释。
execute
方法是Requestable
协议的默认实现,该协议发出请求并调用NotesGetAllService
的委托方法。
注意:如果您希望响应也随调用一起传递,则还可以在execute方法内传递完成处理程序。
请求完成后,它将保存在CoreData
中的注释列表,并且与FRC
绑定的NotesTableViewController
将自动显示结果。
可以在此处找到功能齐全的演示,包括本文随附的NotePostService
和NoteDeleteService
-https://github.com/Restofire/RestofireDemo
快乐网络😎