PowerfulNetworkLayer 1.0.4

PowerfulNetworkLayer 1.0.4

Andrew Kochulab 维护。



 
依赖项
PromiseKit~> 6.2
PromiseKit/Alamofire>= 0
Alamofire~> 4.7
AlamofireObjectMapper~> 5.0
ObjectMapper~> 3.1
 

  • 作者
  • AndrewKochulab

PowerfulNetworkLayer

我想向您介绍一种简单的方式来与您的 API 进行通信。这是一个轻量级的网络层,始终遵循 SOLID 原则。

License

结构

网络层由六个部分组成

  • 环境
  • 请求
  • 响应
  • 操作
  • 调度器
  • 服务

环境

描述您的 API 信息:主机 URL,缓存策略,还包括一个全局用于所有请求的头属性。

请求

描述您的网络请求。您可以创建任何想要请求:GET、POST、DELETE 等。如有需要,还可以创建下载请求。

响应

一个对象,其中包含操作描述中通过操作获得的关于您请求的数据信息。它可以是本地文件、映射对象等。

操作

一个实例,它由强类型请求和响应对象组成。它由调度器执行。

调度器

负责执行请求的调度器。默认情况下,该库有两个调度器,分别是 网络调度器下载调度器,但您可以在需要时继承 基础调度器 并编写自己的类。

服务

最后一个一个是服务。服务是一个对象,通过您提供的调度器执行您的操作。

要求

  • Swift >= 3.0
  • iOS >= 8.0

安装

PowerfulNetworkLayer 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中。

pod 'PowerfulNetworkLayer'

如何使用

通过CocoaPods依赖管理器安装库后,您可以在使用它的文件中编写以下命令导入此库。

import PowerfulNetworkLayer

如果您想创建自定义请求,例如,发送(POST数据)一些信息,您可以编写如下代码:

import Foundation
import Alamofire
import PowerfulNetworkLayer

final class SignUpRequest: BaseRequest<DataRequest> {
    private let email: String
    private let firstName: String
    private let lastName: String
    private let password: String
    
    override var path: String {
        return "auth/signup"
    }
    
    override var method: HTTPMethod {
        return .post
    }
    
    override var encoding: ParameterEncoding {
        return JSONEncoding()
    }
    
    override var parameters: Parameters {
        return [
            "email" : email,
            "first_name" : firstName,
            "last_name" : lastName,
            "password" : password
        ]
    }
    
    init(email: String, firstName: String, lastName: String, password: String) {
        self.email = email
        self.firstName = firstName
        self.lastName = lastName
        self.password = password
    }
}

您也可以创建一个响应(如有需要),代码如下所示

import Foundation
import ObjectMapper
import PowerfulNetworkLayer

final class SignUpResponse: Response, Mappable {
    let user: User
    let token: AccessToken

    required init?(map: Map) { }
    
    func mapping(map: Map) {
        user <- map["user"]
        token <- map["access_token"]
    }
}

每个请求都不能没有操作。操作由请求初始化,通过承诺执行并返回响应。您可以在继承自Operation类的execute方法中进行重写,并在服务中保存一些需要的属性,如下所示。

import Foundation
import PromiseKit
import PowerfulNetworkLayer

final class SignUpOperation: DispatchOperation<SignUpRequest, SignUpResponse> {
    override func execute<ServiceType>(
        in dispatcher: Dispatcher,
        by service: ServiceType
    ) -> Promise<SignUpResponse>
        where ServiceType : AuthService {
            return super.execute(in: dispatcher, by: service).tap { result in
                switch result {
                    case .fulfilled(let response):
                        service.user = response.user
                    
                    case .rejected(_):
                        break
                }
            }
    }
}

此外,有一个示例项目,您可以在其中看到如何使用此框架。

致谢